/*
* File: pku1719.cpp
* Author: chenjiang
*做完这题,进一步加深了对匈牙利算法的理解。
* Created on 2010年4月21日, 下午5:00
*/
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
#define _max 1005
int mapmap[_max][_max], r, c, my[_max];
bool visited[_max];
bool find(int x) {
int i;
for (i = 1; i <= c; i++) {
if (!visited[i] && mapmap[x][i]) {
visited[i] = 1;
if (my[i] == -1 || find(my[i])) {
my[i] = x;
return 1;
}
}
}
return 0;
}
int MMG() {
int i, ans = 0;
memset(my, -1, sizeof (my));
for (i = 1; i <= r; i++) {
memset(visited, 0, sizeof (visited));
if (find(i))
ans++;
}
return ans;
}
/*
*
*/
int main(int argc, char** argv) {
int i, j, ca;
//freopen("a.a", "r", stdin);
//cin >> ca;
scanf("%d", &ca);
while (ca--) {
//cin >> r >> c;
scanf("%d%d", &r, &c);
if (r > c) {
cout << "NO" << endl;
continue;
}
memset(mapmap, 0, sizeof (mapmap));
for (i = 1; i <= c; i++) {
int a, b;
//cin >> a >> b;
scanf("%d%d", &a, &b);
mapmap[a][i] = 1;
mapmap[b][i] = 1;
}
int ans = MMG();
if (ans != r) {
cout << "NO" << endl;
} else {
for (i = 1; i < c; i++) {
if (my[i] == -1) {
for (j = 1; j <= r; j++) {
if (mapmap[j][i]) {
cout << j << " ";
break;
}
}
} else {
cout << my[i] << " ";
}
}
if (my[c] == -1) {
for (j = 1; j <= r; j++) {
if (mapmap[j][i]) {
cout << j << endl;
break;
}
}
} else {
cout << my[c] << endl;
}
}
}
return (EXIT_SUCCESS);
}