#include <bits/stdc++.h>
#define int long long
#define _ 500005
constexpr int inf = 0x3f3f3f3f3f3f3f3f;
using namespace std;
namespace IO {
const int L=1<<20; char buf[L],*p1,*p2,out[L],*p3=out;
#define Gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,L,stdin),p1==p2)?EOF:*p1++)
#define Pc(x) (p3==out+L&&(fwrite(out,1,L,stdout),p3=out),*p3++=(x))
struct F{~F(){fwrite(out,1,p3-out,stdout);}}fff;
template<typename T> inline void rd(T& x){x=0; char c=Gc(); bool f=0; while(!isdigit(c))f^=c=='-',c=Gc();while(isdigit(c))x=x*10+(c^48),c=Gc(); if(f)x=-x;}inline void rd(char& c){do c=Gc();while(isspace(c));}inline void rd(string& s){s=""; char c; rd(c); do s+=c; while(!isspace(c=Gc())&&~c);}template<typename T,typename... A> inline void rd(T& x,A&... a){rd(x),rd(a...);}template<typename T> inline void wt(T x){if(x<0)Pc('-'),x=-x; static int s[45],t=0; do s[++t]=x%10; while(x/=10);while(t)Pc(s[t--]|48);}inline void wt(char c){Pc(c);}inline void wt(const char* s){while(*s)Pc(*s++);}inline void wt(string s){for(char c:s)Pc(c);}template<typename T,typename... A> inline void wt(T x,A... a){wt(x),Pc(sizeof...(a)?' ':'\n'),(wt(a...),0);}
} using namespace IO;
#define rep(i, l, r) for(int i = (l); i <= (r); ++i)
#define urep(i, r, l) for(int i = (r); i >= (l); --i)
int n, a[_];
// ----------------------------------------SEG----------------------------------------
struct node {int pre, suf, sum;}t[_ << 2], ans;
inline node add(node L, node R){return node{max(L.pre, L.sum + R.pre), max(R.suf, R.sum + L.suf), L.sum + R.sum};}
#define mid ((l + r) >> 1)
#define ls (p << 1)
#define rs (ls | 1)
void build(int p = 1, int l = 1, int r = n)
{
if(l == r)
return t[p].sum = a[l], t[p].pre = max(0ll, a[l]), t[p].suf = max(0ll, a[l]), void();
build(ls, l, mid);
build(rs, mid + 1, r);
t[p] = add(t[ls], t[rs]);
}
node query(int ql, int qr, int p = 1, int l = 1, int r = n)
{
if(ql <= l && r <= qr) return t[p];
if(qr <= mid) return query(ql, qr, ls, l, mid);
if(ql > mid) return query(ql, qr, rs, mid + 1, r);
return add(query(ql, qr, ls, l, mid), query(ql, qr, rs, mid + 1, r));
}
char ch;
int q, l, r;
signed main()
{
rd(n);
rep(i, 1, n) rd(ch), a[i] = (ch == 'C' ? -1 : 1);
build();
wt(t[1].pre, t[1].suf, "\n");
wt(t[2].pre, t[2].suf, "\n");
rd(q);
while(q--)
rd(l, r), ans = query(l, r), wt(max(ans.pre, ans.suf), "\n");
return 0;
}