#include <bits/stdc++.h>   using namespace std;   const int N = 405;   char mp[30], s[N], a[5], b[5];   int L, n, m, e[N][N], nxd[30], nxs[30], flg[30], lim[N], tmp[N], mx[2];   vector<int> ans;   bool chk(int pos, int v, int x, bool ff) {     if (lim[pos] != -1 && lim[pos] != flg[v]) return 0;     for (int i = 1; i <= n; i++)       if (e[x][i] && e[x][i + n]) return 0;     for (int i = 1; i <= n; i++) tmp[i] = (e[x][i] ? 0 : (e[x][i + n] ? 1 : -1));     if (ff) {       for (int i = 1; i <= n; i++) {         if (pos + i > n) break;         int t = max(lim[pos + i], tmp[pos + i]);         if (t == -1) break;         if (mx[t] < s[pos + i] -  a  + 1) return 0;         if (mx[t] > s[pos + i] -  a  + 1) break;       }     }     for (int i = 1; i <= n; i++) {       lim[i] = max(lim[i], tmp[i]);     }     return 1;   }   int main() {     scanf( %s , mp + 1);     L = strlen(mp + 1);     memset(lim, -1, sizeof(lim));     memset(mx, -1, sizeof(mx));     for (int i = 1; i <= L; i++) {       flg[i] = mp[i] ==  V ;       mx[flg[i]] = i;     }     for (int i = 1; i <= L; i++)       for (int j = i + 1; j <= L; j++)         if (flg[i] != flg[j]) {           nxd[i] = j;           break;         }     for (int i = 1; i <= L; i++)       for (int j = i + 1; j <= L; j++)         if (flg[i] == flg[j]) {           nxs[i] = j;           break;         }     cin >> n >> m;     for (int i = 1; i <= m; i++) {       int x, y;       scanf( %d%s%d%s , &x, a, &y, b);       int a1 = a[0] ==  V , b1 = b[0] ==  V ;       e[x + a1 * n][y + b1 * n] = 1;       e[y + !b1 * n][x + !a1 * n] = 1;     }     scanf( %s , s + 1);     for (int k = 1; k <= n * 2; k++)       for (int i = 1; i <= n * 2; i++)         for (int j = 1; j <= n * 2; j++) e[i][j] |= (e[i][k] & e[k][j]);     bool ff = 1;     for (int i = 1; i <= n; i++) {       int mn = ff ? s[i] -  a  + 1 : 1;       if (chk(i, mn, i + flg[mn] * n, ff)) {         ans.push_back(mn);       } else if (mn < L && flg[mn] == flg[mn + 1] &&                  chk(i, mn + 1, i + flg[mn + 1] * n, 0)) {         ans.push_back(mn + 1), ff = 0;       } else if (nxd[mn] && chk(i, nxd[mn], i + flg[nxd[mn]] * n, 0)) {         ans.push_back(nxd[mn]), ff = 0;       } else if (nxs[mn] && nxs[mn] > nxd[mn] &&                  chk(i, nxs[mn], i + flg[nxs[mn]] * n, 0)) {         ans.push_back(nxs[mn]), ff = 0;       } else {         return puts( -1 ), 0;       }     }     for (int i = 0; i <= n - 1; i++) printf( %c , ans[i] +  a  - 1);     puts(  );     return 0;   }   