#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10,pot[8]={1,10,100,1000,10000,100000,1000000,10000000};
int n,m,a[N*2],out[N*2][2];
vector<int>in[N*2];
string s;
queue<int>q;
bool b[N*2][N*2];
void provjera(int i){
//cout<<"provjera: "<<i-n+1<<'\n';
queue<int>q;
q.push(i);
b[i][i]=1;
while(!q.empty()){
int node=q.front();
//cout<<node<<'\n';
q.pop();
if(out[node][0]!=-1 and !b[out[node][0]][i])b[out[node][0]][i]=1,q.push(out[node][0]);
if(out[node][1]!=-1 and !b[out[node][1]][i])b[out[node][1]][i]=1,q.push(out[node][1]);
for(int j=0;j<in[node].size();j++)if(!b[in[node][j]][i] and b[out[in[node][j]][0]][i] and b[out[in[node][j]][1]][i])b[in[node][j]][i]=1,q.push(in[node][j]);
}
return;
}
int main(){
cin>>n>>m>>s;
for(int i=0;i<n+m;i++)out[i][0]=out[i][1]=a[i]=-1;
for(int i=0;i<m;i++){
if(s[i]=='?')a[i+n]=-1;
else a[i+n]=(s[i]-'0');
}
for(int i=0;i<m;i++){
//cout<<"__________\n";
char c1,c2;
int x1=0,x2=0;
string s1,s2;
cin>>s1>>s2;
c1=s1[0];
c2=s2[0];
for(int j=1;j<s1.size();j++)x1+=pot[s1.size()-j-1]*(s1[j]-'0');
for(int j=1;j<s2.size();j++)x2+=pot[s2.size()-j-1]*(s2[j]-'0');
x1=x1-1+(c1=='c')*n;
x2=x2-1+(c2=='c')*n;
in[x1].push_back(i+n);
in[x2].push_back(i+n);
out[i+n][0]=x1,out[i+n][1]=x2;
if(s[i]!='?')a[i+n]=(s[i]-'0'),q.push(i+n);
}
for(int i=0;i<m;i++)provjera(i+n);
/*cout<<"b:\n";
for(int i=0;i<m;i++){
for(int j=0;j<n+m;j++)cout<<b[j][i+n]<<' ';
cout<<'\n';
}*/
while(!q.empty()){
int node=q.front();
q.pop();
//if(node>=n)cout<<"c ";
//else cout<<"x ";
//cout<<node%n+1<<' '<<a[node]<<'\n';
if(a[node]==0){
if(a[out[node][0]]==-1)q.push(out[node][0]),a[out[node][0]]=0;
if(a[out[node][1]]==-1)q.push(out[node][1]),a[out[node][1]]=0;
for(int i=0;i<in[node].size();i++){
if(a[in[node][i]]==1){
if(a[out[in[node][i]][0]]==-1)a[out[in[node][i]][0]]=1,q.push(out[in[node][i]][0]);
if(a[out[in[node][i]][1]]==-1)a[out[in[node][i]][1]]=1,q.push(out[in[node][i]][1]);
}
if(a[in[node][i]]==-1){
if(a[out[in[node][i]][0]]==0 and a[out[in[node][i]][1]]==0)a[in[node][i]]=0,q.push(in[node][i]);
}
}
}
else{
for(int i=0;i<m;i++)if(i+n!=node and b[node][i+n] and a[i+n]==-1)a[i+n]=1,q.push(i+n);
}
}
for(int i=0;i<m;i++){
if(a[i+n]==-1)cout<<'?';
else cout<<a[i+n];
}
return 0;
}