#include <bits/stdc++.h>
using namespace std;
struct node {
long long sum, pref, suff, sub;
};
long long a[500100], n;
node seg[2000100];
node merge(node A, node B) {
node C;
C.sum=A.sum+B.sum;
C.pref=min(A.pref, A.sum+B.pref);
C.suff=min(B.suff, B.sum+A.suff);
C.sub=min({A.sub, B.sub, A.suff+B.pref});
return C;
}
void build(long long v, long long l, long long r) {
if(l==r) {
seg[v]={a[l], min(0LL, a[l]), min(0LL, a[l]), min(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(a>mid) 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() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long q, i;
cin>>n;
string s;
cin>>s;
for(i=1; i<=n; i++) {
if(s[i-1]=='C') a[i]=-1;
else a[i]=1;
}
build(1, 1, n);
cin>>q;
while(q--) {
long long l, r;
cin>>l>>r;
node C=query(1, 1, n, l, r);
cout<<C.sum-C.sub<<"\n";
}
}