#include <bits/stdc++.h>
#define qweqwe cin.tie(0)->sync_with_stdio(0)
using namespace std;
using ll = long long;
using pii = pair<ll,ll>;
using db = long double;
int n;
struct SegTree{
vector<ll> seg=vector<ll>(2000067,LLONG_MAX);
void update(int node,int l,int r,ll val,int idx){
if (l==r){
seg[node]=val;return;
}int mid=(l+r)>>1;
if (idx <= mid)update(2*node,l,mid,val,idx);
else update(2*node+1,mid+1,r,val,idx);
seg[node]=min(seg[2*node],seg[2*node+1]);
}
ll query(int node,int l,int r,int ql,int qr){
if (ql>r||qr<l) return LLONG_MAX;
if (l>=ql&&r<=qr) return seg[node];
int mid=(l+r)>>1;
ll q1=query(2*node,l,mid,ql,qr);
ll q2=query(2*node+1,mid+1,r,ql,qr);
return min(q1,q2);
}
void update(int val,int idx){update(1,1,n,val,idx);}
ll query(int l,int r){return query(1,1,n,l,r);}
};
int main(){
qweqwe;
SegTree pref,suff;
cin >> n;
vector<ll> pf(n+1,0),sf(n+2,0),arr(n+1);
for (int i=1;i<=n;i++){
int a;
char c;cin >> c;
if(c=='C') a=1;
else a=-1;
arr[i]=a;
pf[i]=pf[i-1]+arr[i];
}sf[n]=arr[n];
for (int i=n-1;i>=1;i--){
sf[i]=sf[i+1]+arr[i];
}
for (int i=1;i<=n;i++){
pref.update(pf[i],i);
suff.update(sf[i],i);
}
/*
for (int i=1;i<=n;i++){
cout << pf[i] << " " << sf[i] << '\n';
}
*/
int q;cin >> q;
for (int i=0;i<q;i++){
int l,r;cin >> l >> r;
/*
for (int j=l-1;j<=r;j++){
cout << arr[j] << " ";
}cout << "\n";
for (int j=l-1;j<=r;j++){
cout << pf[j] << " ";
}cout << "\n";
for (int j=l-1;j<=r;j++){
cout << sf[j] << " ";
}cout << "\n";
*/
cout << max(pf[l-1]-pref.query(l,r),sf[r+1]-suff.query(l,r)) << "\n";
}
return 0;
}