#include <bits/stdc++.h>
const int N = 1000010;
int n, k;
int u[30];
char t[30], a[N], b[N], s[N];
int go(int i, int p) {
  if (i == n) {
    return 1;
  }
  if (t[s[i]] != -1) {
    if (p == 1) {
      if (t[s[i]] < a[i]) {
        return 0;
      } else if (t[s[i]] > a[i]) {
        return 1;
      } else {
        return go(i + 1, p);
      }
    } else if (p == 2) {
      if (t[s[i]] > b[i]) {
        return 0;
      } else if (t[s[i]] < b[i]) {
        return 1;
      } else {
        return go(i + 1, p);
      }
    } else if (p == 3) {
      if (t[s[i]] > b[i] || t[s[i]] < a[i]) {
        return 0;
      } else if (t[s[i]] > a[i] && t[s[i]] < b[i]) {
        return 1;
      } else {
        int np = 0;
        if (t[s[i]] == a[i]) np |= 1;
        if (t[s[i]] == b[i]) np |= 2;
        return go(i + 1, np);
      }
    }
  } else {
    if (p == 1) {
      if (!u[a[i]]) {
        t[s[i]] = a[i];
        u[a[i]] = 1;
        if (go(i + 1, p)) return 1;
        t[s[i]] = -1;
        u[a[i]] = 0;
      }
      int f = -1;
      for (int j = a[i] + 1; j < k; j++) {
        if (!u[j]) {
          f = j;
          break;
        }
      }
      if (f == -1) return 0;
      t[s[i]] = f;
      u[f] = 1;
      return 1;
    } else if (p == 2) {
      if (!u[b[i]]) {
        t[s[i]] = b[i];
        u[b[i]] = 1;
        if (go(i + 1, p)) return 1;
        t[s[i]] = -1;
        u[b[i]] = 0;
      }
      int f = -1;
      for (int j = b[i] - 1; j >= 0; j--) {
        if (!u[j]) {
          f = j;
          break;
        }
      }
      if (f == -1) return 0;
      t[s[i]] = f;
      u[f] = 1;
      return 1;
    } else {
      if (!u[a[i]]) {
        t[s[i]] = a[i];
        u[a[i]] = 1;
        int np = a[i] == b[i] ? 3 : 1;
        if (go(i + 1, np)) return 1;
        t[s[i]] = -1;
        u[a[i]] = 0;
      }
      if (a[i] != b[i] && !u[b[i]]) {
        t[s[i]] = b[i];
        u[b[i]] = 1;
        if (go(i + 1, 2)) return 1;
        t[s[i]] = -1;
        u[b[i]] = 0;
      }
      int f = -1;
      for (int j = a[i] + 1; j < b[i]; j++) {
        if (!u[j]) {
          f = j;
          break;
        }
      }
      if (f == -1) return 0;
      t[s[i]] = f;
      u[f] = 1;
      return 1;
    }
  }
}
int checkb() {
  for (int i = 0; i < n; i++) {
    if (s[i] < b[i]) return 1;
    if (s[i] > b[i]) return 0;
  }
  return 1;
}
int checka() {
  for (int i = 0; i < n; i++) {
    if (s[i] > a[i]) return 1;
    if (s[i] < a[i]) return 0;
  }
  return 1;
}
int main() {
  int T;
  scanf("%d", &T);
  while (T--) {
    scanf("%d%s%s%s", &k, s, a, b);
    for (int i = 0; i < k; i++) {
      t[i] = -1;
      u[i] = 0;
    }
    for (n = 0; s[n]; n++)
      ;
    for (int i = 0; i < n; i++) {
      a[i] -= 'a';
      b[i] -= 'a';
      s[i] -= 'a';
    }
    if (!go(0, 3)) {
      puts("NO");
      continue;
    }
    for (int i = 0; i < k; i++) {
      if (t[i] == -1) {
        for (int j = 0; j < k; j++) {
          if (!u[j]) {
            t[i] = j;
            u[j] = 1;
            break;
          }
        }
      }
    }
    for (int i = 0; i < n; i++) {
      s[i] = t[s[i]];
    }
    if (checkb() && checka()) {
      puts("YES");
      for (int i = 0; i < k; i++) {
        t[i] += 'a';
      }
      t[k] = 0;
      puts(t);
    } else {
      puts("NO");
    }
  }
  return 0;
}
