#include <bits/stdc++.h>
using namespace std;
int main() {
  char a[1000100 + 1];
  char b[1000100 + 1];
  char c[1000100 + 1];
  for (int i = 0; i < int(1000100 + 1); i++) {
    a[i] = 0;
    b[i] = 0;
    c[i] = 0;
  }
  int ans[30];
  bool used[30];
  vector<pair<int, int> > d;
  int n, k, t;
  int x, y, z;
  long long s;
  bool v = true;
  bool vv;
  scanf("%d", &t);
  for (int tt = 0; tt < int(t); tt++) {
    scanf("%d", &k);
    scanf("%s", c);
    scanf("%s", a);
    scanf("%s", b);
    n = strlen(a);
    z = 0;
    for (int i = 0; i < int(30); i++) {
      ans[i] = -1;
      used[i] = false;
    }
    d.clear();
    vv = true;
    for (int i = 0; i < int(n); i++) {
      if (ans[c[i] - 97] == -1) {
        v = false;
        for (int j = a[i] - 97; j < k; j++) {
          if (!used[j]) {
            v = true;
            used[j] = true;
            ans[c[i] - 97] = j;
            d.push_back(make_pair(c[i] - 97, j));
            break;
          }
        }
        if (v) {
          if (ans[c[i] - 97] > a[i] - 97) break;
        } else {
          for (int j = d.size() - 1; j >= 0; j--) {
            used[d[j].second] = false;
            ans[d[j].first] = -1;
            for (int ii = d[j].second + 1; ii < k; ii++) {
              if (!used[ii]) {
                v = true;
                used[ii] = true;
                ans[d[j].first] = ii;
                break;
              }
            }
            if (v) break;
          }
          if (v) {
            break;
          } else {
            vv = false;
            break;
          }
        }
      } else {
        if (ans[c[i] - 97] > a[i] - 97) {
          break;
        } else if (ans[c[i] - 97] < a[i] - 97) {
          v = false;
          for (int j = d.size() - 1; j >= 0; j--) {
            used[d[j].second] = false;
            ans[d[j].first] = -1;
            for (int ii = d[j].second + 1; ii < k; ii++) {
              if (!used[ii]) {
                v = true;
                used[ii] = true;
                ans[d[j].first] = ii;
                break;
              }
            }
            if (v) break;
          }
          if (v) {
            break;
          } else {
            vv = false;
            break;
          }
        }
      }
    }
    for (int i = 0; i < int(n); i++) {
      if (ans[c[i] - 97] == -1) {
        for (int j = 0; j < int(k); j++) {
          if (!used[j]) {
            ans[c[i] - 97] = j;
            used[j] = true;
            break;
          }
        }
      }
    }
    for (int i = 0; i < int(k); i++) {
      if (ans[i] == -1) {
        for (int j = 0; j < int(k); j++) {
          if (!used[j]) {
            ans[i] = j;
            used[j] = true;
            break;
          }
        }
      }
    }
    if (!vv)
      printf("NO\n");
    else {
      for (int i = 0; i < int(n); i++) {
        if (ans[c[i] - 97] < b[i] - 97)
          break;
        else if (ans[c[i] - 97] > b[i] - 97) {
          vv = false;
          break;
        }
      }
      if (!vv)
        printf("NO\n");
      else {
        printf("YES\n");
        for (int i = 0; i < int(k); i++) printf("%c", ans[i] + 97);
        printf("\n");
      }
    }
    for (int i = 0; i < int(n + 1); i++) {
      a[i] = 0;
      b[i] = 0;
      c[i] = 0;
    }
  }
  return 0;
}
