#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int MOD = 1e9 + 7;
void countShortestPaths(int n, vector<vector<int>>& adj) {
// Initialize dist with -1 (unvisited)
vector<int> dist(n + 1, -1);
vector<int> ways(n + 1, 0);
queue<int> q;
// Start from node 1
dist[1] = 0;
ways[1] = 1;
q.push(1);
while (!q.empty()) {
int u = q.front();
q.pop();
for (int v : adj[u]) {
// 1. First time reaching 'v' (unvisited)
if (dist[v] == -1) {
dist[v] = dist[u] + 1;
ways[v] = ways[u];
q.push(v);
}
// 2. Found another shortest path to 'v'
else if (dist[v] == dist[u] + 1) {
ways[v] = (ways[v] + ways[u]) % MOD;
}
}
}
// Output the number of ways to reach each node
for (int i = 1; i <= n; i++) {
cout << "Node " << i << ": " << ways[i] << " ways\n";
}
}
int main(){}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7Cgp2b2lkIGNvdW50U2hvcnRlc3RQYXRocyhpbnQgbiwgdmVjdG9yPHZlY3RvcjxpbnQ+PiYgYWRqKSB7CiAgICAvLyBJbml0aWFsaXplIGRpc3Qgd2l0aCAtMSAodW52aXNpdGVkKQogICAgdmVjdG9yPGludD4gZGlzdChuICsgMSwgLTEpOwogICAgdmVjdG9yPGludD4gd2F5cyhuICsgMSwgMCk7CiAgICAKICAgIHF1ZXVlPGludD4gcTsKICAgIAogICAgLy8gU3RhcnQgZnJvbSBub2RlIDEKICAgIGRpc3RbMV0gPSAwOwogICAgd2F5c1sxXSA9IDE7CiAgICBxLnB1c2goMSk7CiAgICAKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHUgPSBxLmZyb250KCk7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICAKICAgICAgICBmb3IgKGludCB2IDogYWRqW3VdKSB7CiAgICAgICAgICAgIC8vIDEuIEZpcnN0IHRpbWUgcmVhY2hpbmcgJ3YnICh1bnZpc2l0ZWQpCiAgICAgICAgICAgIGlmIChkaXN0W3ZdID09IC0xKSB7CiAgICAgICAgICAgICAgICBkaXN0W3ZdID0gZGlzdFt1XSArIDE7CiAgICAgICAgICAgICAgICB3YXlzW3ZdID0gd2F5c1t1XTsKICAgICAgICAgICAgICAgIHEucHVzaCh2KTsKICAgICAgICAgICAgfSAKICAgICAgICAgICAgLy8gMi4gRm91bmQgYW5vdGhlciBzaG9ydGVzdCBwYXRoIHRvICd2JwogICAgICAgICAgICBlbHNlIGlmIChkaXN0W3ZdID09IGRpc3RbdV0gKyAxKSB7CiAgICAgICAgICAgICAgICB3YXlzW3ZdID0gKHdheXNbdl0gKyB3YXlzW3VdKSAlIE1PRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gT3V0cHV0IHRoZSBudW1iZXIgb2Ygd2F5cyB0byByZWFjaCBlYWNoIG5vZGUKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGNvdXQgPDwgIk5vZGUgIiA8PCBpIDw8ICI6ICIgPDwgd2F5c1tpXSA8PCAiIHdheXNcbiI7CiAgICB9Cn0KaW50IG1haW4oKXt9