过#6#7#8
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;//no u
const ll N=2e5+10;//n=1e5
ll p[N],s[N],sz[N],rd[N];
ll lc[N],rc[N],f[N],rt,cnt;
char st[N];
void push_up(ll u){
sz[u]=sz[lc[u]]+sz[rc[u]]+1;
ll tl=p[u]*f[sz[lc[u]]+1];
ll tr=s[rc[u]]*f[sz[lc[u]]+2];
s[u]=(s[lc[u]]+tl+tr);
}
ll merge(ll u,ll v){
if(u==0||v==0) return u+v;
ll tp;
if(rd[u]<rd[v]) tp=u,rc[u]=merge(rc[u],v);
else tp=v,lc[v]=merge(u,lc[v]);
push_up(tp); return tp;
}
void split(ll u,ll &rl,ll &rr,ll k){
if(u==0){
rl=rr=0; return;
}
if(sz[lc[u]]+1<=k) rl=u,split(rc[u],rc[u],rr,k-sz[lc[u]]-1);
else rr=u,split(lc[u],rl,lc[u],k);
push_up(u);
}
void reset(ll x,char d){
ll a,b,c;
split(rt,a,b,x-1),split(b,b,c,1);//b,b,c,x
p[b]=s[b]=d-'a'+1;
rt=merge(a,b),rt=merge(rt,c);
}
void insert(ll x,char d){
ll a,b; split(rt,a,b,x);
ll c=++cnt; sz[c]=1,p[c]=s[c]=d-'a'+1,rd[c]=rand();//no sz[c]
rt=merge(a,c),rt=merge(rt,b);
}
ll query(ll x,ll y){
ll a,b,c;
split(rt,a,b,x-1),split(b,b,c,y-x+1);//y->y-x
ll tp=s[b];
rt=merge(a,b),rt=merge(rt,c);
return tp;
}
ll quire(ll i,ll j,ll n){
ll l=1,r=n-max(i,j)+1,ans=0;
while(l<=r){
ll mid=l+r>>1;
if(query(i,i+mid-1)==query(j,j+mid-1)){
ans=mid,l=mid+1; }
else r=mid-1;
} return ans;
}
int main(){
scanf("%s",&st);
ll n=strlen(st),m;
srand(998244353),f[1]=1;
for(ll i=2;i<=n;i++) f[i]=f[i-1]*29;
for(ll i=1;i<=n;i++){
sz[i]=1,rd[i]=rand(),p[i]=s[i]=st[i-1]-'a'+1;//st[i],no size
rt=merge(rt,i);
} cnt=n;
scanf("%lld",&m);
for(ll i=1;i<=m;i++){
char op[2]; ll x;
scanf("%s%lld",&op,&x);
if(op[0]=='Q'){
ll y; scanf("%lld",&y);
printf("%lld\n",quire(x,y,n));
}else if(op[0]=='R'){
char y[2]; scanf("%s",&y);
reset(x,y[0]);
}else{
char y[2]; scanf("%s",&y);
insert(x,y[0]);
}
}
return 0;
}