#include<iostream>
#include<algorithm>
const int sz=1e5+10;
int arr[sz];
struct ST{
int tree[sz<<2][26],lazy[sz<<2][26];
void build(int p,int ln,int rn){
if(ln==rn)return tree[p][arr[ln]]=1,void();
int mid=ln+rn>>1;
build(p<<1,ln,mid);
build(p<<1|1,mid+1,rn);
for(int i=0;i<26;i++)
tree[p][i]=tree[p<<1][i]+tree[p<<1|1][i];
}
void pushdown(int p,int ln,int rn){
for(int i=0;i<26;i++){
if(lazy[p][i]!=0){
lazy[p<<1][i]=lazy[p<<1|1][i]=lazy[p][i];
tree[p<<1][lazy[p][i]]+=tree[p<<1][i],tree[p<<1][i]=0;
tree[p<<1|1][lazy[p][i]]+=tree[p<<1|1][i],tree[p<<1|1][i]=0;
lazy[p][i]=0;
}
}
}
void change(int p,int ln,int rn,int l,int r,int x,int y){
if(ln!=rn)pushdown(p,ln,rn);
if(ln>=l&&rn<=r)
return tree[p][y]+=tree[p][x],tree[p][x]=0,lazy[p][x]=y,void();
int mid=ln+rn>>1;
if(l<=mid)change(p<<1,ln,mid,l,r,x,y);
if(r>mid)change(p<<1|1,mid+1,rn,l,r,x,y);
for(int i=0;i<26;i++)
tree[p][i]=tree[p<<1][i]+tree[p<<1|1][i];
}
void print(int p,int ln,int rn){
if(ln==rn)
for(int i=0;i<26;i++)
if(tree[p][i]!=0)return putchar(i+'a'),void();
int mid=ln+rn>>1;
pushdown(p,ln,rn);
print(p<<1,ln,mid);
print(p<<1|1,mid+1,rn);
}
}st;
int main(){
std::cin.tie(nullptr)->sync_with_stdio(false);
int n,q;
std::string s;
std::cin>>s>>q;
n=s.length();
for(int i=1;i<=n;i++)arr[i]=s[i-1]-'a';
st.build(1,1,n);
while(q--){
int l,r;
char x,y;
std::cin>>l>>r>>x>>y;
st.change(1,1,n,l,r,x-'a',y-'a');
}
st.print(1,1,n);
return 0;
}