#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
void findShortestPathsAndFives(int n, vector<vector<int>>& adj, vector<int>& val) {
vector<int> dist(n + 1, -1);
vector<int> max_fives(n + 1, 0);
queue<int> q;
// Base Case: Start from node 1
dist[1] = 0;
max_fives[1] = (val[1] == 5 ? 1 : 0);
q.push(1);
while (!q.empty()) {
int u = q.front();
q.pop();
for (int v : adj[u]) {
int is_five = (val[v] == 5 ? 1 : 0);
// 1. First time reaching 'v' (unvisited)
if (dist[v] == -1) {
dist[v] = dist[u] + 1;
max_fives[v] = max_fives[u] + is_five;
q.push(v);
}
// 2. Found an alternative shortest path to 'v'
else if (dist[v] == dist[u] + 1) {
// Maximize the number of 5s on the shortest path
max_fives[v] = max(max_fives[v], max_fives[u] + is_five);
}
}
}
// Output the results
for (int i = 1; i <= n; i++) {
if (dist[i] != -1) {
cout << "Node " << i << " -> Shortest Path: " << dist[i]
<< ", Max 5s: " << max_fives[i] << "\n";
} else {
cout << "Node " << i << " -> Unreachable\n";
}
}
}
int main(){}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBmaW5kU2hvcnRlc3RQYXRoc0FuZEZpdmVzKGludCBuLCB2ZWN0b3I8dmVjdG9yPGludD4+JiBhZGosIHZlY3RvcjxpbnQ+JiB2YWwpIHsKICAgIHZlY3RvcjxpbnQ+IGRpc3QobiArIDEsIC0xKTsKICAgIHZlY3RvcjxpbnQ+IG1heF9maXZlcyhuICsgMSwgMCk7CiAgICAKICAgIHF1ZXVlPGludD4gcTsKICAgIAogICAgLy8gQmFzZSBDYXNlOiBTdGFydCBmcm9tIG5vZGUgMQogICAgZGlzdFsxXSA9IDA7CiAgICBtYXhfZml2ZXNbMV0gPSAodmFsWzFdID09IDUgPyAxIDogMCk7CiAgICBxLnB1c2goMSk7CiAgICAKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHUgPSBxLmZyb250KCk7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICAKICAgICAgICBmb3IgKGludCB2IDogYWRqW3VdKSB7CiAgICAgICAgICAgIGludCBpc19maXZlID0gKHZhbFt2XSA9PSA1ID8gMSA6IDApOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gMS4gRmlyc3QgdGltZSByZWFjaGluZyAndicgKHVudmlzaXRlZCkKICAgICAgICAgICAgaWYgKGRpc3Rbdl0gPT0gLTEpIHsKICAgICAgICAgICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdICsgMTsKICAgICAgICAgICAgICAgIG1heF9maXZlc1t2XSA9IG1heF9maXZlc1t1XSArIGlzX2ZpdmU7CiAgICAgICAgICAgICAgICBxLnB1c2godik7CiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIC8vIDIuIEZvdW5kIGFuIGFsdGVybmF0aXZlIHNob3J0ZXN0IHBhdGggdG8gJ3YnCiAgICAgICAgICAgIGVsc2UgaWYgKGRpc3Rbdl0gPT0gZGlzdFt1XSArIDEpIHsKICAgICAgICAgICAgICAgIC8vIE1heGltaXplIHRoZSBudW1iZXIgb2YgNXMgb24gdGhlIHNob3J0ZXN0IHBhdGgKICAgICAgICAgICAgICAgIG1heF9maXZlc1t2XSA9IG1heChtYXhfZml2ZXNbdl0sIG1heF9maXZlc1t1XSArIGlzX2ZpdmUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBPdXRwdXQgdGhlIHJlc3VsdHMKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGlmIChkaXN0W2ldICE9IC0xKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIk5vZGUgIiA8PCBpIDw8ICIgLT4gU2hvcnRlc3QgUGF0aDogIiA8PCBkaXN0W2ldIAogICAgICAgICAgICAgICAgIDw8ICIsIE1heCA1czogIiA8PCBtYXhfZml2ZXNbaV0gPDwgIlxuIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb3V0IDw8ICJOb2RlICIgPDwgaSA8PCAiIC0+IFVucmVhY2hhYmxlXG4iOwogICAgICAgIH0KICAgIH0KfQppbnQgbWFpbigpe30=