import java.util.*;
public class Main {
public static void findWaysToReachNodes(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) {
graph.get(edge[0]).add(edge[1]);
graph.get(edge[1]).add(edge[0]);
}
Queue<Integer> queue = new LinkedList<>();
int[] visited = new int[n + 1];
int[] ways = new int[n + 1];
int[] level = new int[n + 1];
queue.add(1);
visited[1] = 1;
ways[1] = 1;
level[1] = 0;
while (!queue.isEmpty()) {
int node = queue.poll();
System.
out.
println("Node: " + node
+ ", Ways: " + ways
[node
]);
for (int neighbor : graph.get(node)) {
if (visited[neighbor] == 0) {
queue.add(neighbor);
visited[neighbor] = 1;
level[neighbor] = level[node] + 1;
ways[neighbor] = ways[node];
} else if (level[neighbor] == level[node] + 1) {
ways[neighbor] += ways[node];
}
}
}
}
public static void main
(String[] args
) { int n = 5;
int[][] edges = {
{1, 2}, {1, 3}, {2, 4}, {3, 4}, {4, 5}
};
findWaysToReachNodes(n, edges);
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBmaW5kV2F5c1RvUmVhY2hOb2RlcyhpbnQgbiwgaW50W11bXSBlZGdlcykgewogICAgICAgIExpc3Q8TGlzdDxJbnRlZ2VyPj4gZ3JhcGggPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgZ3JhcGguYWRkKG5ldyBBcnJheUxpc3Q8PigpKTsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50W10gZWRnZSA6IGVkZ2VzKSB7CiAgICAgICAgICAgIGdyYXBoLmdldChlZGdlWzBdKS5hZGQoZWRnZVsxXSk7CiAgICAgICAgICAgIGdyYXBoLmdldChlZGdlWzFdKS5hZGQoZWRnZVswXSk7CiAgICAgICAgfQoKICAgICAgICBRdWV1ZTxJbnRlZ2VyPiBxdWV1ZSA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKICAgICAgICBpbnRbXSB2aXNpdGVkID0gbmV3IGludFtuICsgMV07CiAgICAgICAgaW50W10gd2F5cyA9IG5ldyBpbnRbbiArIDFdOwogICAgICAgIGludFtdIGxldmVsID0gbmV3IGludFtuICsgMV07CgogICAgICAgIHF1ZXVlLmFkZCgxKTsKICAgICAgICB2aXNpdGVkWzFdID0gMTsKICAgICAgICB3YXlzWzFdID0gMTsKICAgICAgICBsZXZlbFsxXSA9IDA7CgogICAgICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIGludCBub2RlID0gcXVldWUucG9sbCgpOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vZGU6ICIgKyBub2RlICsgIiwgV2F5czogIiArIHdheXNbbm9kZV0pOwoKICAgICAgICAgICAgZm9yIChpbnQgbmVpZ2hib3IgOiBncmFwaC5nZXQobm9kZSkpIHsKICAgICAgICAgICAgICAgIGlmICh2aXNpdGVkW25laWdoYm9yXSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcXVldWUuYWRkKG5laWdoYm9yKTsKICAgICAgICAgICAgICAgICAgICB2aXNpdGVkW25laWdoYm9yXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgbGV2ZWxbbmVpZ2hib3JdID0gbGV2ZWxbbm9kZV0gKyAxOwogICAgICAgICAgICAgICAgICAgIHdheXNbbmVpZ2hib3JdID0gd2F5c1tub2RlXTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGV2ZWxbbmVpZ2hib3JdID09IGxldmVsW25vZGVdICsgMSkgewogICAgICAgICAgICAgICAgICAgIHdheXNbbmVpZ2hib3JdICs9IHdheXNbbm9kZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIGludCBuID0gNTsKICAgICAgICBpbnRbXVtdIGVkZ2VzID0gewogICAgICAgICAgICB7MSwgMn0sIHsxLCAzfSwgezIsIDR9LCB7MywgNH0sIHs0LCA1fQogICAgICAgIH07CgogICAgICAgIGZpbmRXYXlzVG9SZWFjaE5vZGVzKG4sIGVkZ2VzKTsKICAgIH0KfQo=