#include<bits/stdc++.h>
#define mxn 1000005
using namespace std;
unsigned long long hsh[mxn];
struct node{
int ls, rs, vl, nc, siz, ct, ch;
unsigned long long w;
}tr[mxn];
int cnt, rt, q, ta, tb, tc, tot, n, m;
int nw(int x){
tr[++cnt].vl = x;
tr[cnt].nc = rand();
tr[cnt].siz = 1;
tr[cnt].ct = 1;
return cnt;
}
void pup(int u){
tr[u].siz = tr[tr[u].ls].siz + tr[tr[u].rs].siz + tr[u].ct;
tr[u].w = tr[tr[u].ls].w * hsh[tr[tr[u].rs].siz + 1] + hsh[tr[tr[u].rs].siz] * tr[u].ch + tr[tr[u].rs].w;
}
int mg(int u, int v){
if (!u || !v)
return u | v;
if (tr[u].nc < tr[v].nc){
tr[u].rs = mg(tr[u].rs, v);
pup(u);
return u;
}else{
tr[v].ls = mg(u, tr[v].ls);
pup(v);
return v;
}
}
void spt(int u, int x, int &a, int &b){
if (!u){
a = 0;
b = 0;
}else{
if (x <= tr[tr[u].ls].siz){
b = u;
spt(tr[u].ls, x, a, tr[u].ls);
}else{
a = u;
spt(tr[u].rs, x - tr[tr[u].ls].siz - 1, tr[u].rs, b);
}
pup(u);
}
}
void ins(int u, char c){
int ta, tb;
spt(rt, u, ta, tb);
tr[++tot].w = c - 96;
tr[tot].ch = c - 96;
tr[tot].siz = 1;
tr[tot].nc = rand();
rt = mg(mg(ta, tot), tb);
}
void del(int u){
int ta, tb, tc;
spt(rt, u, ta, tc);
spt(ta, u - 1, ta, tb);
tb = mg(tr[tb].ls, tr[tb].rs);
rt = mg(mg(ta, tb), tc);
}
long long qry(int l, int r){
int le = r - l + 1;
int ta, tb, tc, td;
spt(rt, l - 1, ta, tb);
spt(tb, le, tc, td);
unsigned long long res = tr[tc].w;
rt = mg(ta, mg(tc, td));
return res;
}
bool fd(int u, int v, int mid){
unsigned long long ans = qry(u, u + mid - 1), aans = qry(v, v + mid - 1);
if (ans == aans)
return 1;
else
return 0;
}
string a, b;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> b >> m;
a = " ";
a += b;
n = a.size() - 1;
hsh[0] = 1;
for (int i = 1; i < mxn; i++)
hsh[i] = hsh[i - 1] * 27;
for (int i = 1; i <= n; i++)
ins(i, a[i]);
for (int i = 1; i <= m; i++){
char op;
int u, v;
cin >> op >> u;
if (op == 'Q'){
cin >> v;
int l = 1, r = min(n - u + 1, n - v + 1), res = 0;
while (l <= r){
int mid = (l + r) >> 1;
if (fd(u, v, mid))
res = mid, l = mid + 1;
else
r = mid - 1;
}
cout << res << "\n";
}else if (op == 'R'){
del(u);
char qwq;
cin >> qwq;
ins(u - 1, qwq);
}else{
n++;
char qwq;
cin >> qwq;
ins(u, qwq);
}
}
}