#include <bits/stdc++.h>
using namespace std;
struct node {
long long sum, pref, suff;
};
long long a[200100], n;
node seg[800100];
node merge(node A, node B) {
node C;
C.sum=A.sum+B.sum;
C.pref=max(A.pref, A.sum+B.pref);
C.suff=max(B.suff, B.sum+A.suff);
return C;
}
void build(long long v, long long l, long long r) {
if(l==r) {
seg[v]={a[l], max(0LL, a[l])};
return;
}
long long mid=(l+r)/2;
build(2*v, l, mid);
build(2*v+1, mid+1, r);
seg[v]=merge(seg[2*v], seg[2*v+1]);
}
node query(long long v, long long l, long long r, long long a, long long b) {
if(l==a && r==b) {
return seg[v];
}
long long mid=(l+r)/2;
if(b<=mid) return query(2*v, l, mid, a, b);
if(mid<a) return query(2*v+1, mid+1, r, a, b);
return merge(query(2*v, l, mid, a, mid), query(2*v+1, mid+1, r, mid+1, b));
}
int main() {
long long q,i; cin>>n;
char c[n+1];
for(i=1; i<=n; i++) cin>>c[i];
for(i=1; i<=n; i++) {
if(c[i]=='C') {
a[i]=-1;
}
else a[i]=1;
}
cin>>q;
build(1, 1, n);
while(q--) {
long long l, r; cin>>l>>r;
node C=query(1, 1, n, l, r);
cout<<max(C.pref, C.suff)<<endl;
}
}