#include <bits/stdc++.h>
using namespace std;
int itest, ntest;
char s[3][1000010];
int len, m;
char doi[210];
bool isUse[210];
bool res, dk1, dk2;
void rs() {
  for (int i = 0; i < 210; i++) {
    isUse[i] = false;
    doi[i] = 0;
  }
}
void xet(int vtc) {
  if (vtc == len) {
    res = true;
    return;
  }
  if (dk1 == true && dk2 == true) {
    res = true;
    return;
  }
  if (dk1 == true && dk2 == false && res == false) {
    if (doi[s[0][vtc]] == 0) {
      char kytu = 0;
      for (int i = 'a'; i <= s[2][vtc]; i++) {
        if (isUse[i] == false) {
          kytu = i;
          break;
        }
      }
      if (kytu == 0) return;
      isUse[kytu] = true;
      doi[s[0][vtc]] = kytu;
      if (kytu < s[2][vtc]) {
        res = true;
        return;
      }
      xet(vtc + 1);
      if (res) return;
      isUse[kytu] = false;
      doi[s[0][vtc]] = 0;
    } else {
      char kytu = doi[s[0][vtc]];
      if (kytu > s[2][vtc]) return;
      if (kytu < s[2][vtc]) {
        dk2 = true;
        res = true;
        return;
      }
      xet(vtc + 1);
    }
  }
  if (dk1 == false && dk2 == true && res == false) {
    if (doi[s[0][vtc]] == 0) {
      char kytu = 0;
      for (int i = ('a' + m - 1); i >= s[1][vtc]; i--) {
        if (isUse[i] == false) {
          kytu = i;
          break;
        }
      }
      if (kytu == 0) return;
      isUse[kytu] = true;
      doi[s[0][vtc]] = kytu;
      if (kytu > s[1][vtc]) {
        dk1 = true;
        res = true;
        return;
      }
      xet(vtc + 1);
      if (res) return;
      isUse[kytu] = false;
      doi[s[0][vtc]] = 0;
    } else {
      char kytu = doi[s[0][vtc]];
      if (kytu < s[1][vtc]) return;
      if (kytu > s[1][vtc]) {
        dk1 = true;
        res = true;
        return;
      }
      xet(vtc + 1);
    }
  }
  if (dk1 == false && dk2 == false && res == false) {
    if (doi[s[0][vtc]] == 0) {
      for (int i = s[1][vtc]; i <= s[2][vtc]; i++) {
        if (isUse[i] == false) {
          isUse[i] = true;
          doi[s[0][vtc]] = i;
          if (i > s[1][vtc]) dk1 = true;
          if (i < s[2][vtc]) dk2 = true;
          xet(vtc + 1);
          if (res) return;
          isUse[i] = false;
          doi[s[0][vtc]] = 0;
          if (i > s[1][vtc]) dk1 = false;
          if (i < s[2][vtc]) dk2 = false;
        }
      }
    } else {
      char kytu = doi[s[0][vtc]];
      if (kytu < s[1][vtc] || kytu > s[2][vtc]) return;
      if (kytu > s[1][vtc]) dk1 = true;
      if (kytu < s[2][vtc]) dk2 = true;
      xet(vtc + 1);
      if (res) return;
      if (kytu > s[1][vtc]) dk1 = false;
      if (kytu < s[2][vtc]) dk2 = false;
    }
  }
}
void solve() {
  rs();
  len = strlen(s[0]);
  res = false;
  dk1 = false;
  dk2 = false;
  xet(0);
}
void output() {
  if (!res)
    printf("NO\n");
  else {
    printf("YES\n");
    for (int i = 'a'; i < 'a' + m; i++) {
      if (doi[i] == 0) {
        for (int j = 'a'; j < 'a' + m; j++) {
          if (isUse[j] == false) {
            isUse[j] = true;
            doi[i] = j;
            break;
          }
        }
      }
    }
    for (int i = 'a'; i < 'a' + m; i++) printf("%c", doi[i]);
    printf("\n");
  }
}
int main() {
  scanf("%d", &ntest);
  for (itest = 0; itest < ntest; itest++) {
    scanf("%d", &m);
    for (int i = 0; i < 3; i++) {
      scanf("%s", &s[i]);
    }
    solve();
    output();
  }
  return 0;
}
