#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
vector<int> bfsTraversal(int N, const vector<pair<int, int>>& edges) {
vector<vector<int>> adjList(N);
vector<int> visitedOrder;
vector<bool> visited(N, false);
for (const auto& edge : edges) {
int u = edge.first;
int v = edge.second;
adjList[u].push_back(v);
}
for (auto& neighbors : adjList) {
sort(neighbors.begin(), neighbors.end());
}
queue<int> q;
q.push(0);
visited[0] = true;
while (!q.empty()) {
int current = q.front();
q.pop();
visitedOrder.push_back(current);
for (int neighbor : adjList[current]) {
if (!visited[neighbor]) {
visited[neighbor] = true;
q.push(neighbor);
}
}
}
return visitedOrder;
}
int main() {
int T;
cin >> T;
while (T--) {
int N, E;
cin >> N >> E;
vector<pair<int, int>> edges;
for (int i = 0; i < E; i++) {
int u, v;
cin >> u >> v;
edges.emplace_back(u, v);
}
vector<int> result = bfsTraversal(N, edges);
for (size_t i = 0; i < result.size(); i++) {
if (i != 0) cout << " ";
cout << result[i];
}
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPGludD4gYmZzVHJhdmVyc2FsKGludCBOLCBjb25zdCB2ZWN0b3I8cGFpcjxpbnQsIGludD4+JiBlZGdlcykgewogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGpMaXN0KE4pOwogICAgdmVjdG9yPGludD4gdmlzaXRlZE9yZGVyOwogICAgdmVjdG9yPGJvb2w+IHZpc2l0ZWQoTiwgZmFsc2UpOwogICAgCiAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBlZGdlcykgewogICAgICAgIGludCB1ID0gZWRnZS5maXJzdDsKICAgICAgICBpbnQgdiA9IGVkZ2Uuc2Vjb25kOwogICAgICAgIGFkakxpc3RbdV0ucHVzaF9iYWNrKHYpOwogICAgfQogICAgCiAgICBmb3IgKGF1dG8mIG5laWdoYm9ycyA6IGFkakxpc3QpIHsKICAgICAgICBzb3J0KG5laWdoYm9ycy5iZWdpbigpLCBuZWlnaGJvcnMuZW5kKCkpOwogICAgfQogICAgCiAgICBxdWV1ZTxpbnQ+IHE7CiAgICBxLnB1c2goMCk7CiAgICB2aXNpdGVkWzBdID0gdHJ1ZTsKICAgIAogICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKICAgICAgICBpbnQgY3VycmVudCA9IHEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwogICAgICAgIHZpc2l0ZWRPcmRlci5wdXNoX2JhY2soY3VycmVudCk7CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgbmVpZ2hib3IgOiBhZGpMaXN0W2N1cnJlbnRdKSB7CiAgICAgICAgICAgIGlmICghdmlzaXRlZFtuZWlnaGJvcl0pIHsKICAgICAgICAgICAgICAgIHZpc2l0ZWRbbmVpZ2hib3JdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHEucHVzaChuZWlnaGJvcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIHJldHVybiB2aXNpdGVkT3JkZXI7Cn0KCmludCBtYWluKCkgewogICAgaW50IFQ7CiAgICBjaW4gPj4gVDsKICAgIAogICAgd2hpbGUgKFQtLSkgewogICAgICAgIGludCBOLCBFOwogICAgICAgIGNpbiA+PiBOID4+IEU7CiAgICAgICAgCiAgICAgICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBlZGdlczsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEU7IGkrKykgewogICAgICAgICAgICBpbnQgdSwgdjsKICAgICAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICAgICAgZWRnZXMuZW1wbGFjZV9iYWNrKHUsIHYpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2ZWN0b3I8aW50PiByZXN1bHQgPSBiZnNUcmF2ZXJzYWwoTiwgZWRnZXMpOwogICAgICAgIAogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpICE9IDApIGNvdXQgPDwgIiAiOwogICAgICAgICAgICBjb3V0IDw8IHJlc3VsdFtpXTsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgfQogICAgCiAgICByZXR1cm4gMDsKfQ==