rt
#include<iostream>
using namespace std;
string s;
int m;
struct data{
char p[26];
string ss;
}t[40000005];
void pushup(int o){
t[o].ss=t[o<<1].ss+t[o<<1|1].ss;
}
void build(int o,int l,int r){
for(int i=0;i<26;i++)t[o].p[i]=i;
if(l==r){
t[o].ss=t[o].ss+s[l-1];
return ;
}
int mid=l+r>>1;
build(o<<1,l,mid);
build(o<<1|1,mid+1,r);
pushup(o);
}
void pushdown(int o){
for(int i=0;i<t[o].ss.size();i++){
t[o].ss[i]=t[o].p[t[o].ss[i]-'a']+'a';
}
for(int i=0;i<26;i++){
t[o<<1].p[i]=t[o].p[t[o<<1].p[i]];
t[o<<1|1].p[i]=t[o].p[t[o<<1|1].p[i]];
}
for(int i=0;i<26;i++)t[o].p[i]=i;
return ;
}
void update(int o,int l,int r,int x,int y,int ql,int qr){
if(l>=ql&&r<=qr){
t[o].p[x]=y;
return ;
}
pushdown(o);
int mid=l+r>>1;
if(ql<=mid)update(o<<1,l,mid,x,y,ql,qr);
if(qr>mid)update(o<<1|1,mid+1,r,x,y,ql,qr);
}
void up1(int o,int l,int r){
if(l==r){
t[o].ss[0]=t[o].p[t[o].ss[0]-'a']+'a';
return ;
}
int mid=l+r>>1;
up1(o<<1,l,mid);
up1(o<<1|1,mid+1,r);
pushup(o);
for(int i=0;i<t[o].ss.size();i++){
t[o].ss[i]=t[o].p[t[o].ss[i]-'a']+'a';
}
return ;
}
int main(){
cin>>s>>m;
int n=s.size();
build(1,1,s.size());
while(m--){
int l,r;
char x,y;
cin>>l>>r>>x>>y;
update(1,1,n,x-'a',y-'a',l,r);
}
up1(1,1,n);
pushdown(1);
cout<<t[1].ss;
}