#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#include<queue>
using namespace std;
int a[100][100], vs[100], n, start;
struct Edge{
int u;
int v;
};
vector<Edge> T;
void TreeDFS(int u) {
vs[u] = 1;
for (int i = 1; i <= n; i++) {
if (vs[i] == 0 && a[u][i] == 1) {
Edge e;
if (u < i) {
e.u = u; e.v = i;
} else {
e.u = i; e.v = u;
}
T.push_back(e);
TreeDFS(i);
}
}
}
void TreeBFS(int start) {
queue<int> q;
vs[start] = 1;
q.push(start);
while (!q.empty()) {
int u = q.front();
for (int i = 1; i <= n; i++) {
if (a[u][i] == 1 && vs[i] == 0) {
vs[i] = 1;
Edge e;
if (u < i) {
e.u = u; e.v = i;
} else {
e.u = i; e.v = u;
}
T.push_back(e);
q.push(i);
}
}
q.pop();
}
}
int main() {
cout << "So dinh: ";
cin >> n;
// Khoi tao ma tran ke
cout << "Nhap ma tran:\n";
memset(vs, 0, 100);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
cout << "Thuc hien tim cay khung tu dinh: ";
int start;
cin >> start;
// TreeDFS(start);
TreeBFS(start);
for (int i = 0; i < T.size(); i++) {
cout << T[i].u << " " << T[i].v << "\n";
}
}
/*
Test
6
0 1 1 0 0 0
1 0 0 1 1 0
1 0 0 1 0 0
0 1 1 0 1 1
0 1 0 1 0 1
0 0 0 1 1 0
*/
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxxdWV1ZT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBhWzEwMF1bMTAwXSwgdnNbMTAwXSwgbiwgc3RhcnQ7CgpzdHJ1Y3QgRWRnZXsKICBpbnQgdTsKICBpbnQgdjsKfTsKdmVjdG9yPEVkZ2U+IFQ7Cgp2b2lkIFRyZWVERlMoaW50IHUpIHsKCXZzW3VdID0gMTsKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWlmICh2c1tpXSA9PSAwICYmIGFbdV1baV0gPT0gMSkgewoJCQlFZGdlIGU7CgkJCWlmICh1IDwgaSkgewoJCQkJZS51ID0gdTsgZS52ID0gaTsKCQkJfSBlbHNlIHsKCQkJCWUudSA9IGk7IGUudiA9IHU7CgkJCX0KCQkJVC5wdXNoX2JhY2soZSk7CgkJCVRyZWVERlMoaSk7CgkJfQoJfQp9Cgp2b2lkIFRyZWVCRlMoaW50IHN0YXJ0KSB7CglxdWV1ZTxpbnQ+IHE7Cgl2c1tzdGFydF0gPSAxOwoJcS5wdXNoKHN0YXJ0KTsKCXdoaWxlICghcS5lbXB0eSgpKSB7CgkJaW50IHUgPSBxLmZyb250KCk7CgkJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJCWlmIChhW3VdW2ldID09IDEgJiYgdnNbaV0gPT0gMCkgewoJCQkJdnNbaV0gPSAxOwoJCQkJRWRnZSBlOwoJCQkJaWYgKHUgPCBpKSB7CgkJCQkJZS51ID0gdTsgZS52ID0gaTsKCQkJCX0gZWxzZSB7CgkJCQkJZS51ID0gaTsgZS52ID0gdTsKCQkJCX0KCQkJCVQucHVzaF9iYWNrKGUpOwoJCQkJcS5wdXNoKGkpOwoJCQl9CgkJfQoJCXEucG9wKCk7Cgl9Cn0KCmludCBtYWluKCkgewoJY291dCA8PCAiU28gZGluaDogIjsKICAgIGNpbiA+PiBuOwogICAgLy8gS2hvaSB0YW8gbWEgdHJhbiBrZQogICAgY291dCA8PCAiTmhhcCBtYSB0cmFuOlxuIjsKICAgIG1lbXNldCh2cywgMCwgMTAwKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG47IGorKykgewogICAgICAgICAgICBjaW4gPj4gYVtpXVtqXTsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8ICJUaHVjIGhpZW4gdGltIGNheSBraHVuZyB0dSBkaW5oOiAiOwogICAgaW50IHN0YXJ0OwogICAgY2luID4+IHN0YXJ0OwogICAgLy8gVHJlZURGUyhzdGFydCk7CiAgICBUcmVlQkZTKHN0YXJ0KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVC5zaXplKCk7IGkrKykgewogICAgCWNvdXQgPDwgVFtpXS51IDw8ICIgIiA8PCBUW2ldLnYgPDwgIlxuIjsKCX0KICAgIAp9CgoKLyoKVGVzdAo2CjAgMSAxIDAgMCAwCjEgMCAwIDEgMSAwCjEgMCAwIDEgMCAwCjAgMSAxIDAgMSAxCjAgMSAwIDEgMCAxCjAgMCAwIDEgMSAwCgoKCiov