#include <bits/stdc++.h>
using namespace std;
int T, K, N;
char S[1000005];
char A[1000005];
char B[1000005];
string cur;
int P[26];
bool used[26];
bool go(int idx, bool done) {
  if (idx == N) return true;
  if (P[S[idx] - 'a'] != -1) {
    char c = P[S[idx] - 'a'] + 'a';
    cur += c;
    if (!done) {
      if (c < A[idx]) {
        cur.pop_back();
        return false;
      } else if (c > A[idx]) {
        if (go(idx + 1, true)) return true;
        cur.pop_back();
        return false;
      } else {
        if (go(idx + 1, false)) return true;
        cur.pop_back();
        return false;
      }
    } else {
      if (go(idx + 1, true)) return true;
      cur.pop_back();
      return false;
    }
  } else {
    int st = 0;
    if (!done) {
      if (!used[A[idx] - 'a']) {
        P[S[idx] - 'a'] = A[idx] - 'a';
        used[A[idx] - 'a'] = true;
        cur += A[idx];
        if (go(idx + 1, false)) return true;
        cur.pop_back();
        used[A[idx] - 'a'] = false;
        P[S[idx] - 'a'] = -1;
      }
      st = A[idx] - 'a' + 1;
    }
    for (int i = st; i < K; i++)
      if (!used[i]) {
        P[S[idx] - 'a'] = i;
        used[i] = true;
        cur += (char)(i + 'a');
        if (go(idx + 1, true)) return true;
        cur.pop_back();
        return false;
      }
    return false;
  }
}
int main() {
  scanf("%d", &T);
  for (int t = 0; t < T; t++) {
    scanf("%d", &K);
    scanf("%s", S);
    scanf("%s", A);
    scanf("%s", B);
    N = strlen(S);
    cur = "";
    memset(P, -1, sizeof(P));
    memset(used, 0, sizeof(used));
    if (go(0, 0) && cur <= B) {
      printf("YES\n");
      for (int i = 0; i < K; i++)
        if (P[i] == -1)
          for (int j = 0; j < K; j++)
            if (!used[j]) {
              P[i] = j;
              used[j] = true;
              break;
            }
      for (int i = 0; i < K; i++) printf("%c", (char)(P[i] + 'a'));
      printf("\n");
    } else
      printf("NO\n");
  }
  return 0;
}
