#include <bits/stdc++.h>
using namespace std;
#define pb push_back
typedef vector<int> vi;
const int maxn = 1e4 + 7;
int n, m, s1[maxn], s2[maxn];
bool isk0[2 * maxn], vis[2 * maxn], in[maxn][2 * maxn];
string c;
vi ts;
void dfs(int v){
if (isk0[v]) return;
isk0[v] = 1;
if (v <= n) return;
dfs(s1[v - n]);
dfs(s2[v - n]);
}
void dfs2(int v){
if (v <= n) return;
if (vis[v]) return;
vis[v] = 1;
dfs2(s1[v - n]);
dfs2(s2[v - n]);
ts.pb(v);
}
void dfs3(int v, int pc){
if (vis[v]) return;
vis[v] = 1;
if (v <= n){
in[pc][v] = 1;
return;
}
dfs3(s1[v - n], pc);
dfs3(s2[v - n], pc);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m >> c;
c = "." + c;
for (int i = 1; i <= m; i++){
char c1, c2;
int x1, x2;
cin >> c1 >> x1 >> c2 >> x2;
x1 += (c1 == 'c') * n;
x2 += (c2 == 'c') * n;
s1[i] = x1, s2[i] = x2;
}
for (int i = 1; i <= m; i++)
dfs2(i + n);
for (int i = 1; i <= m; i++){
for (int j = 1; j <= n + m; j++)
vis[j] = 0;
dfs3(i + n, i);
}
for (int i = 1; i <= m; i++)
if (c[i] == '0') dfs(i + n);
for (int i = 1; i <= m; i++)
if (isk0[i + n]) c[i] = '0';
for (int i = 1; i <= m; i++){
if (isk0[s1[i]])
s1[i] = 0;
if (isk0[s2[i]])
s2[i] = 0;
}
for (int i = 1; i <= m; i++)
in[i][0] = 1, in[i][i + n] = 1;
for (int i = 0; i < m; i++){
int v = ts[i];
for (int j = 1; j <= m; j++)
if (in[j][s1[v - n]] && in[j][s2[v - n]])
in[j][v] = 1;
}
for (int i = 1; i <= m; i++)
for (int j = 1; j <= m; j++)
if (c[j] == '1' && in[i][j + n])
c[i] = '1';
for (int i = 1; i <= m; i++)
cout << c[i];
cout << "\n";
return 0;
}