#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n, m;
cin >> n >> m;
// Topological sort using Kahn's algorithm
// Goal: find lexicographically smallest valid ordering of tasks
// adj[i] stores all tasks that come after task i
vector<vector<int>> adj(n + 1);
// deg[i] = incoming edges (how many tasks must be done before task i)
vector<int> deg(n + 1, 0);
// Build the directed graph
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b; // a must come before b
adj[a].push_back(b);
deg[b]++;
}
// Min heap - always pick smallest numbered task available
// This ensures lexicographically smallest ordering
priority_queue<int, vector<int>, greater<int>> pq;
// Start with tasks that have no dependencies (in-degree = 0)
for (int i = 1; i <= n; i++) {
if (deg[i] == 0) {
pq.push(i);
}
}
vector<int> ans;
// Process tasks in topological order
while (!pq.empty()) {
int curr = pq.top();
pq.pop();
ans.push_back(curr);
// Remove this task from graph
// Check if any dependent tasks are now ready
for (int next : adj[curr]) {
deg[next]--;
if (deg[next] == 0) {
pq.push(next);
}
}
}
// If we couldn't process all tasks, there's a cycle
if (ans.size() != n) {
cout << -1 << "\n";
} else {
for (int i = 0; i < n; i++) {
if (i > 0) cout << " ";
cout << ans[i];
}
cout << "\n";
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICAKICAgIGludCB0OwogICAgY2luID4+IHQ7CiAgICAKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBpbnQgbiwgbTsKICAgICAgICBjaW4gPj4gbiA+PiBtOwogICAgICAgIAogICAgICAgIC8vIFRvcG9sb2dpY2FsIHNvcnQgdXNpbmcgS2FobidzIGFsZ29yaXRobQogICAgICAgIC8vIEdvYWw6IGZpbmQgbGV4aWNvZ3JhcGhpY2FsbHkgc21hbGxlc3QgdmFsaWQgb3JkZXJpbmcgb2YgdGFza3MKICAgICAgICAKICAgICAgICAvLyBhZGpbaV0gc3RvcmVzIGFsbCB0YXNrcyB0aGF0IGNvbWUgYWZ0ZXIgdGFzayBpCiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGoobiArIDEpOwogICAgICAgIAogICAgICAgIC8vIGRlZ1tpXSA9IGluY29taW5nIGVkZ2VzIChob3cgbWFueSB0YXNrcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRhc2sgaSkKICAgICAgICB2ZWN0b3I8aW50PiBkZWcobiArIDEsIDApOwogICAgICAgIAogICAgICAgIC8vIEJ1aWxkIHRoZSBkaXJlY3RlZCBncmFwaAogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgICAgICAgIGludCBhLCBiOwogICAgICAgICAgICBjaW4gPj4gYSA+PiBiOyAgLy8gYSBtdXN0IGNvbWUgYmVmb3JlIGIKICAgICAgICAgICAgYWRqW2FdLnB1c2hfYmFjayhiKTsKICAgICAgICAgICAgZGVnW2JdKys7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIE1pbiBoZWFwIC0gYWx3YXlzIHBpY2sgc21hbGxlc3QgbnVtYmVyZWQgdGFzayBhdmFpbGFibGUKICAgICAgICAvLyBUaGlzIGVuc3VyZXMgbGV4aWNvZ3JhcGhpY2FsbHkgc21hbGxlc3Qgb3JkZXJpbmcKICAgICAgICBwcmlvcml0eV9xdWV1ZTxpbnQsIHZlY3RvcjxpbnQ+LCBncmVhdGVyPGludD4+IHBxOwogICAgICAgIAogICAgICAgIC8vIFN0YXJ0IHdpdGggdGFza3MgdGhhdCBoYXZlIG5vIGRlcGVuZGVuY2llcyAoaW4tZGVncmVlID0gMCkKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKGRlZ1tpXSA9PSAwKSB7CiAgICAgICAgICAgICAgICBwcS5wdXNoKGkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZlY3RvcjxpbnQ+IGFuczsKICAgICAgICAKICAgICAgICAvLyBQcm9jZXNzIHRhc2tzIGluIHRvcG9sb2dpY2FsIG9yZGVyCiAgICAgICAgd2hpbGUgKCFwcS5lbXB0eSgpKSB7CiAgICAgICAgICAgIGludCBjdXJyID0gcHEudG9wKCk7CiAgICAgICAgICAgIHBxLnBvcCgpOwogICAgICAgICAgICBhbnMucHVzaF9iYWNrKGN1cnIpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgdGFzayBmcm9tIGdyYXBoCiAgICAgICAgICAgIC8vIENoZWNrIGlmIGFueSBkZXBlbmRlbnQgdGFza3MgYXJlIG5vdyByZWFkeQogICAgICAgICAgICBmb3IgKGludCBuZXh0IDogYWRqW2N1cnJdKSB7CiAgICAgICAgICAgICAgICBkZWdbbmV4dF0tLTsKICAgICAgICAgICAgICAgIGlmIChkZWdbbmV4dF0gPT0gMCkgewogICAgICAgICAgICAgICAgICAgIHBxLnB1c2gobmV4dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSWYgd2UgY291bGRuJ3QgcHJvY2VzcyBhbGwgdGFza3MsIHRoZXJlJ3MgYSBjeWNsZQogICAgICAgIGlmIChhbnMuc2l6ZSgpICE9IG4pIHsKICAgICAgICAgICAgY291dCA8PCAtMSA8PCAiXG4iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIGNvdXQgPDwgIiAiOwogICAgICAgICAgICAgICAgY291dCA8PCBhbnNbaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291dCA8PCAiXG4iOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0=