https://vjudge.net/problem/UVA-12538
#include<iostream>
#include<ext/rope>
using namespace __gnu_cxx;
using namespace std;
crope ro,l[50000+5],tmp;
char str[205];
int main(){
int n;
scanf("%d",&n);
int op,d=0,cnt=1,c,p,v;
while(n--){
scanf("%d",&op);
if(op==1){
scanf("%d%s",&p,str);
p-=d;
ro.insert(p,str);
l[cnt++]=ro;
}else if(op==2){
scanf("%d%d",&p,&c);
p-=d;c-=d;
ro.erase(p-1,c);
l[cnt++]=ro;
}else{
scanf("%d%d%d",&v,&p,&c);
p-=d;c-=d;v-=d;
tmp=l[v].substr(p-1,c);
d+=count(tmp.begin(),tmp.end(),'c');
cout<<tmp<<'\n';
}
}
}