#include #include #include #include #include using namespace std; typedef long long ll; typedef pair pii; #define pb push_back #define sz(a) ((int)a.size()) #define mem(a, b) memset(a, b, sizeof a) #define lson (rt << 1) #define rson (rt << 1 | 1) #define gmid (l + r >> 1) #define lnum (mid - l + 1) #define rnum (r - mid) const int maxn = 1e2 + 5; const int maxm = 1e6 + 5; const int mod = 1e9 + 7; const int inf = 0x3f3f3f3f; char s1[maxn][maxn], s2[maxn][maxn]; char t1[maxn][maxn], t2[maxn][maxn]; int ans[maxn], n, m, pos; int get(char ch, int k){ for(int i = 1; i <= m; ++i){ if(s2[1][i] == ch){ --k; if(!k){ pos = i; s2[1][i] = 0; return i; } } } return 0; } int dfs(int p){ if(p == m + 1) return 1; int pos, k = 1, f; while((pos = get(s1[1][p], k))){ // cout << p << " " << pos << " " << k << endl; // for(int i = 1; i <= m; ++i) cout << s2[1][i] << " "; cout << endl; f = 0; for(int i = 2; i <= n; ++i){ if(s2[i][pos] == s1[i][p]) continue; s2[1][pos] = s1[1][p]; f = 1; break; } if(f) { ++k; continue; } ans[p] = pos; if(dfs(p + 1)) return 1; s2[1][pos] = s1[1][p]; ++k; } return 0; } int main(){ ios::sync_with_stdio(0); cin.tie(0); int t; scanf("%d", &t); while(t--){ scanf("%d%d", &n, &m); for(int i = 1; i <= n; ++i) scanf("%s%s", s1[i] + 1, s2[i] + 1); int f = 1; for(int i = 1; i <= n; ++i){ strcpy(t1[i] + 1, s1[i] + 1); strcpy(t2[i] + 1, s2[i] + 1); t1[i][m + 1] = t2[i][m + 1] = 0; sort(t1[i] + 1, t1[i] + 1 + m); sort(t2[i] + 1, t2[i] + 1 + m); if(strcmp(t1[i] + 1, t2[i] + 1)) f = 0; } if(!f) { printf("-1\n"); continue; } // cout << " x" << endl; f = dfs(1); if(!f) { printf("-1\n"); continue; } for(int i = 1; i <= m; ++i) printf("%d%c", ans[i], i == m ? '\n' : ' '); } return 0; }