#include <bits/stdc++.h>
using namespace std;
//toast418
#define ffor(i,o,f) for(int i = o; i < f; i++)
#define pb push_back
#define mp make_pair
#define all(a) (a).begin(), (a).end()
#define F first
#define S second
#define PI 3.14159265358979323846264338327950
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl '\n'
#define sz(x) ((int)(x).size())
typedef long long ll;
typedef pair < int, int > pii;
typedef vector < int > vi;
typedef vector < pii > vii;
typedef vector < vi > gi;
typedef vector < ll > vll;
typedef map < int, int > mii;
int t, n, m, u, v, groups;
const int tam = 1005;
gi g;
vi dist;
vi parent;
queue < int > q;
void bfs(int nd){
dist[nd] = 0;
parent[nd] = -1;
q.push(nd);
while(!q.empty()){
nd = q.front();
q.pop();
ffor(i, 0, sz(g[nd])){
int nxt = g[nd][i];
if(dist[nxt] == -1){
dist[nxt] = dist[nd] + 1;
parent[nxt] = nd;
q.push(nxt);
}
}
}
}
void printPath(int nd){
vi path;
while(nd != -1){
path.pb(nd);
nd = parent[nd];
}
reverse(all(path));
ffor(i, 0, sz(path)){
if(i > 0){
cout << " -> ";
}
cout << path[i];
}
}
int main()
{
g.assign(tam, vi ());
dist.assign(tam, -1);
parent.assign(tam, -1);
g[0].pb(2);
g[2].pb(0);
g[0].pb(3);
g[3].pb(0);
g[1].pb(3);
g[3].pb(1);
g[1].pb(6);
g[6].pb(1);
g[2].pb(3);
g[3].pb(2);
g[2].pb(4);
g[4].pb(2);
g[2].pb(5);
g[5].pb(2);
g[4].pb(5);
g[5].pb(4);
g[3].pb(7);
g[7].pb(3);
g[6].pb(7);
g[7].pb(6);
bfs(0);
ffor(i, 0, 8){
cout << "Nodo " << i << ": ";
if(dist[i] == -1){
cout << "inalcanzable" << endl;
continue;
}
cout << "distancia = " << dist[i] << ", ruta = ";
printPath(i);
cout << endl;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovL3RvYXN0NDE4CiNkZWZpbmUgZmZvcihpLG8sZikJCSAgIGZvcihpbnQgaSA9IG87IGkgPCBmOyBpKyspCiNkZWZpbmUgcGIgCQkJCSAgIHB1c2hfYmFjawojZGVmaW5lIG1wICAgICAgICAgICAgICAgICBtYWtlX3BhaXIKI2RlZmluZSBhbGwoYSkgICAgICAgICAgICAgKGEpLmJlZ2luKCksIChhKS5lbmQoKQojZGVmaW5lIEYgICAgICAgICAgICAgICAgICBmaXJzdAojZGVmaW5lIFMgICAgICAgICAgICAgICAgICBzZWNvbmQKI2RlZmluZSBQSSAJCQkJICAgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MAojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKI2RlZmluZSBlbmRsIAkJCSAgICdcbicKI2RlZmluZSBzeih4KSAgICAgICAgICAgICAgKChpbnQpKHgpLnNpemUoKSkKdHlwZWRlZiBsb25nIGxvbmcgICAgICAgICAgbGw7CnR5cGVkZWYgcGFpciA8IGludCwgaW50ID4gIHBpaTsKdHlwZWRlZiB2ZWN0b3IgPCBpbnQgPiAgICAgdmk7CnR5cGVkZWYgdmVjdG9yIDwgcGlpID4gICAgIHZpaTsKdHlwZWRlZiB2ZWN0b3IgPCB2aSA+IAkgICBnaTsKdHlwZWRlZiB2ZWN0b3IgPCBsbCA+ICAgICAgdmxsOwp0eXBlZGVmIG1hcCA8IGludCwgaW50ID4gICBtaWk7CgppbnQgdCwgbiwgbSwgdSwgdiwgZ3JvdXBzOwpjb25zdCBpbnQgdGFtID0gMTAwNTsKZ2kgZzsKdmkgZGlzdDsKdmkgcGFyZW50OwpxdWV1ZSA8IGludCA+IHE7Cgp2b2lkIGJmcyhpbnQgbmQpewogICAgZGlzdFtuZF0gPSAwOwogICAgcGFyZW50W25kXSA9IC0xOwogICAgcS5wdXNoKG5kKTsKICAgIHdoaWxlKCFxLmVtcHR5KCkpewogICAgICAgIG5kID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgZmZvcihpLCAwLCBzeihnW25kXSkpewogICAgICAgICAgICBpbnQgbnh0ID0gZ1tuZF1baV07CiAgICAgICAgICAgIGlmKGRpc3Rbbnh0XSA9PSAtMSl7CiAgICAgICAgICAgICAgICBkaXN0W254dF0gPSBkaXN0W25kXSArIDE7CiAgICAgICAgICAgICAgICBwYXJlbnRbbnh0XSA9IG5kOwogICAgICAgICAgICAgICAgcS5wdXNoKG54dCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnZvaWQgcHJpbnRQYXRoKGludCBuZCl7CiAgICB2aSBwYXRoOwogICAgd2hpbGUobmQgIT0gLTEpewogICAgICAgIHBhdGgucGIobmQpOwogICAgICAgIG5kID0gcGFyZW50W25kXTsKICAgIH0KICAgIHJldmVyc2UoYWxsKHBhdGgpKTsKICAgIGZmb3IoaSwgMCwgc3oocGF0aCkpewogICAgICAgIGlmKGkgPiAwKXsKICAgICAgICAgICAgY291dCA8PCAiIC0+ICI7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgcGF0aFtpXTsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBnLmFzc2lnbih0YW0sIHZpICgpKTsKICAgIGRpc3QuYXNzaWduKHRhbSwgLTEpOwogICAgcGFyZW50LmFzc2lnbih0YW0sIC0xKTsKCiAgICBnWzBdLnBiKDIpOwogICAgZ1syXS5wYigwKTsKICAgIGdbMF0ucGIoMyk7CiAgICBnWzNdLnBiKDApOwogICAgZ1sxXS5wYigzKTsKICAgIGdbM10ucGIoMSk7CiAgICBnWzFdLnBiKDYpOwogICAgZ1s2XS5wYigxKTsKICAgIGdbMl0ucGIoMyk7CiAgICBnWzNdLnBiKDIpOwogICAgZ1syXS5wYig0KTsKICAgIGdbNF0ucGIoMik7CiAgICBnWzJdLnBiKDUpOwogICAgZ1s1XS5wYigyKTsKICAgIGdbNF0ucGIoNSk7CiAgICBnWzVdLnBiKDQpOwogICAgZ1szXS5wYig3KTsKICAgIGdbN10ucGIoMyk7CiAgICBnWzZdLnBiKDcpOwogICAgZ1s3XS5wYig2KTsKCiAgICBiZnMoMCk7CgogICAgZmZvcihpLCAwLCA4KXsKICAgICAgICBjb3V0IDw8ICJOb2RvICIgPDwgaSA8PCAiOiAiOwogICAgICAgIGlmKGRpc3RbaV0gPT0gLTEpewogICAgICAgICAgICBjb3V0IDw8ICJpbmFsY2FuemFibGUiIDw8IGVuZGw7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8ICJkaXN0YW5jaWEgPSAiIDw8IGRpc3RbaV0gPDwgIiwgcnV0YSA9ICI7CiAgICAgICAgcHJpbnRQYXRoKGkpOwogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KfQo=
Nodo 0: distancia = 0, ruta = 0
Nodo 1: distancia = 2, ruta = 0 -> 3 -> 1
Nodo 2: distancia = 1, ruta = 0 -> 2
Nodo 3: distancia = 1, ruta = 0 -> 3
Nodo 4: distancia = 2, ruta = 0 -> 2 -> 4
Nodo 5: distancia = 2, ruta = 0 -> 2 -> 5
Nodo 6: distancia = 3, ruta = 0 -> 3 -> 1 -> 6
Nodo 7: distancia = 2, ruta = 0 -> 3 -> 7