func_code_string: #include <bits/stdc++.h>   using namespace std;   char a[1000005], b[1000005], s[1000005];   int k, T, tmp[27], vis[27], p, n, tt[27], vv[27];   bool check(int x, int cas) {     memcpy(tt, tmp, sizeof(tt));     memcpy(vv, vis, sizeof(vv));     if (cas == 1) {       for (int i = x; i <= n; i++) {         if (tt[s[i] -  a ] != -1) {           if (tt[s[i] -  a ] > a[i]) return 1;           if (tt[s[i] -  a ] < a[i]) return 0;           continue;         }         for (int j = a[i] + 1; j <= k +  a  - 1; j++)           if (!vv[j -  a ]) return 1;         if (!vv[a[i] -  a ])           vv[a[i] -  a ] = 1, tt[s[i] -  a ] = a[i];         else           return 0;       }       return 1;     } else {       for (int i = x; i <= n; i++) {         if (tt[s[i] -  a ] != -1) {           if (tt[s[i] -  a ] > b[i]) return 0;           if (tt[s[i] -  a ] < b[i]) return 1;           continue;         }         for (int j =  a ; j < b[i]; j++)           if (!vv[j -  a ]) return 1;         if (!vv[b[i] -  a ])           vv[b[i] -  a ] = 1, tt[s[i] -  a ] = b[i];         else           return 0;       }       return 1;     }   }   void solve() {     scanf( %d%s%s%s , &k, s + 1, a + 1, b + 1);     n = strlen(s + 1);     memset(tmp, -1, sizeof(tmp));     p = n + 1;     memset(vis, 0, sizeof(vis));     for (int i = 1; i <= n; i++)       if (a[i] == b[i]) {         if (tmp[s[i] -  a ] == a[i]) continue;         if (tmp[s[i] -  a ] == -1 && !vis[a[i] -  a ])           tmp[s[i] -  a ] = a[i], vis[a[i] -  a ] = 1;         else {           puts( NO );           return;         }       } else {         p = i;         break;       }     int flag = 0;     for (int i = p; i <= n; i++) {       if (!flag && a[i] > b[i]) {         puts( NO );         return;       }       if (tmp[s[i] -  a ] != -1) {         if ((((flag & 2) == 0) && tmp[s[i] -  a ] < a[i]) ||             (((flag & 4) == 0) && tmp[s[i] -  a ] > b[i])) {           puts( NO );           return;         }         if ((flag & 2) == 0 && tmp[s[i] -  a ] > a[i]) flag |= 2;         if ((flag & 4) == 0 && tmp[s[i] -  a ] < b[i]) flag |= 4;       } else if ((flag & 6) == 0) {         bool used = 0;         for (int j = a[i] + 1; j < b[i]; j++)           if (!vis[j -  a ]) {             tmp[s[i] -  a ] = j;             vis[j -  a ] = 1;             flag |= 6;             used = 1;             break;           }         if (!used) {           if (!used && !vis[b[i] -  a ]) {             vis[b[i] -  a ] = 1, tmp[s[i] -  a ] = b[i];             if (!check(i + 1, 2))               vis[b[i] -  a ] = 0, tmp[s[i] -  a ] = -1;             else               flag |= 2, used = 1;           }           if (!used && !vis[a[i] -  a ]) {             vis[a[i] -  a ] = 1, tmp[s[i] -  a ] = a[i];             if (check(i + 1, 1)) flag |= 4, used = 1;           }           if (!used) {             puts( NO );             return;           }         }       } else if ((flag & 2) == 0) {         bool used = 0;         for (int j = a[i] + 1; j <= k +  a  - 1; j++)           if (!vis[j -  a ]) {             tmp[s[i] -  a ] = j;             vis[j -  a ] = 1;             flag |= 2;             used = 1;             break;           }         if (!used) {           if (!vis[a[i] -  a ])             vis[a[i] -  a ] = 1, tmp[s[i] -  a ] = a[i];           else {             puts( NO );             return;           }         }       } else if ((flag & 4) == 0) {         bool used = 0;         for (int j =  a ; j < b[i]; j++)           if (!vis[j -  a ]) {             tmp[s[i] -  a ] = j;             vis[j -  a ] = 1;             flag |= 4;             used = 1;             break;           }         if (!used) {           if (!vis[b[i] -  a ])             vis[b[i] -  a ] = 1, tmp[s[i] -  a ] = b[i];           else {             puts( NO );             return;           }         }       }       flag |= 1;       if (flag == 7) break;     }     puts( YES );     int now = 0;     while (vis[now]) now++;     for (int i = 0; i < k; i++)       if (tmp[i] == -1) {         tmp[i] =  a  + now;         vis[now] = 1;         while (vis[now]) now++;       }     for (int i = 0; i < k; i++) printf( %c , tmp[i]);     puts(  );   }   int main() {     scanf( %d , &T);     while (T--) solve();   }   