#include<bits/stdc++.h>
using namespace std;
const long long MAXN=500009;
long long mas[MAXN];
inline long long min1(long long a,long long b)
{
if(a>b)return b;
return a;
}
struct Node
{
int l,r;
int minPref,minSuf,sum;
int ans;
};
Node tree[4*MAXN];
void mergeNodes(Node& ans,Node a, Node b)
{
ans.l=a.l;
ans.r=b.r;
ans.sum=a.sum+b.sum;
ans.minPref=min1(a.minPref,a.sum+b.minPref);
ans.minSuf=min1(b.minSuf,b.sum+a.minSuf);
ans.ans=min1(min1(a.ans+b.sum,a.sum+b.ans),a.minPref+b.minSuf);
}
void build(int n,int l,int r)
{
if(l==r)
{
tree[n].l=l;
tree[n].r=r;
tree[n].sum=mas[l];
tree[n].minPref=min1(0,mas[l]);
tree[n].minPref=min1(0,mas[l]);
tree[n].ans=min1(0,mas[l]);
return;
}
build(2*n,l,(l+r)/2);
build(2*n+1,(l+r)/2+1,r);
mergeNodes(tree[n],tree[2*n],tree[2*n+1]);
}
Node getAns(int n,int l,int r)
{
if(tree[n].l==l&&tree[n].r==r)
{
return tree[n];
}
if(tree[2*n].r<l)
{
return getAns(2*n+1,l,r);
}
if(tree[2*n+1].l>r)
{
return getAns(2*n,l,r);
}
Node ans;
mergeNodes(ans,getAns(2*n,l,tree[2*n].r),getAns(2*n+1,tree[2*n+1].l,r));
return ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N,Q,l,r;
char ch;
cin>>N;
for(int i=1;i<=N;i++)
{
cin>>ch;
if(ch=='C')mas[i]=1;
else mas[i]=-1;
}
build(1,1,N);
cin>>Q;
while(Q--)
{
cin>>l>>r;
cout<<-getAns(1,l,r).ans<<'\n';
}
return 0;
}