import java.util.*;
public class Main {
public static void findShortestPaths(int n, int[][] edges) {
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i <= n; i++) {
graph.add(new ArrayList<>());
}
for (int[] edge : edges) {
int u = edge[0], v = edge[1];
graph.get(u).add(v);
graph.get(v).add(u);
}
Queue<Integer> queue = new LinkedList<>();
int[] level = new int[n + 1];
int[] ways = new int[n + 1];
boolean[] visited = new boolean[n + 1];
queue.offer(1);
visited[1] = true;
level[1] = 0;
ways[1] = 1;
while (!queue.isEmpty()) {
int node = queue.poll();
for (int neighbor : graph.get(node)) {
if (!visited[neighbor]) {
queue.offer(neighbor);
visited[neighbor] = true;
level[neighbor] = level[node] + 1;
ways[neighbor] = ways[node];
} else if (level[node] + 1 == level[neighbor]) {
ways[neighbor] += ways[node];
}
}
}
for (int i = 1; i <= n; i++) {
System.
out.
println("Node: " + i
+ ", Shortest Path Count: " + ways
[i
]); }
}
public static void main
(String[] args
) { int n = 6;
int[][] edges = {
{1, 2}, {1, 3}, {2, 4}, {3, 4}, {4, 5}, {5, 6}
};
findShortestPaths(n, edges);
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmaW5kU2hvcnRlc3RQYXRocyhpbnQgbiwgaW50W11bXSBlZGdlcykgewogICAgICAgIExpc3Q8TGlzdDxJbnRlZ2VyPj4gZ3JhcGggPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgZ3JhcGguYWRkKG5ldyBBcnJheUxpc3Q8PigpKTsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50W10gZWRnZSA6IGVkZ2VzKSB7CiAgICAgICAgICAgIGludCB1ID0gZWRnZVswXSwgdiA9IGVkZ2VbMV07CiAgICAgICAgICAgIGdyYXBoLmdldCh1KS5hZGQodik7CiAgICAgICAgICAgIGdyYXBoLmdldCh2KS5hZGQodSk7CiAgICAgICAgfQoKICAgICAgICBRdWV1ZTxJbnRlZ2VyPiBxdWV1ZSA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKICAgICAgICBpbnRbXSBsZXZlbCA9IG5ldyBpbnRbbiArIDFdOwogICAgICAgIGludFtdIHdheXMgPSBuZXcgaW50W24gKyAxXTsKICAgICAgICBib29sZWFuW10gdmlzaXRlZCA9IG5ldyBib29sZWFuW24gKyAxXTsKCiAgICAgICAgQXJyYXlzLmZpbGwobGV2ZWwsIC0xKTsKCiAgICAgICAgcXVldWUub2ZmZXIoMSk7CiAgICAgICAgdmlzaXRlZFsxXSA9IHRydWU7CiAgICAgICAgbGV2ZWxbMV0gPSAwOwogICAgICAgIHdheXNbMV0gPSAxOwoKICAgICAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICBpbnQgbm9kZSA9IHF1ZXVlLnBvbGwoKTsKCiAgICAgICAgICAgIGZvciAoaW50IG5laWdoYm9yIDogZ3JhcGguZ2V0KG5vZGUpKSB7CiAgICAgICAgICAgICAgICBpZiAoIXZpc2l0ZWRbbmVpZ2hib3JdKSB7CiAgICAgICAgICAgICAgICAgICAgcXVldWUub2ZmZXIobmVpZ2hib3IpOwogICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRbbmVpZ2hib3JdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBsZXZlbFtuZWlnaGJvcl0gPSBsZXZlbFtub2RlXSArIDE7CiAgICAgICAgICAgICAgICAgICAgd2F5c1tuZWlnaGJvcl0gPSB3YXlzW25vZGVdOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZXZlbFtub2RlXSArIDEgPT0gbGV2ZWxbbmVpZ2hib3JdKSB7CiAgICAgICAgICAgICAgICAgICAgd2F5c1tuZWlnaGJvcl0gKz0gd2F5c1tub2RlXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm9kZTogIiArIGkgKyAiLCBTaG9ydGVzdCBQYXRoIENvdW50OiAiICsgd2F5c1tpXSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBpbnQgbiA9IDY7CiAgICAgICAgaW50W11bXSBlZGdlcyA9IHsKICAgICAgICAgICAgezEsIDJ9LCB7MSwgM30sIHsyLCA0fSwgezMsIDR9LCB7NCwgNX0sIHs1LCA2fQogICAgICAgIH07CgogICAgICAgIGZpbmRTaG9ydGVzdFBhdGhzKG4sIGVkZ2VzKTsKICAgIH0KfQo=