/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
// your code goes here
Scanner scanner
= new Scanner
(System.
in);
int n = scanner.nextInt();
int m = scanner.nextInt();
for (int i = 0; i <= n; i++) {
adj[i] = new ArrayList<>();
}
int[] nodeValues = new int[n + 1];
for (int i = 1; i <= n; i++) {
nodeValues[i] = scanner.nextInt();
}
for (int i = 0; i < m; i++) {
int u = scanner.nextInt();
int v = scanner.nextInt();
adj[u].add(v);
adj[v].add(u);
}
scanner.close();
solve(n, adj, nodeValues);
}
public static void solve(int n, List<Integer>[] adj, int[] values) {
int[] dist = new int[n + 1];
int[] maxFives = new int[n + 1];
long[] pathCount = new long[n + 1];
Queue<Integer> queue = new LinkedList<>();
dist[1] = 0;
maxFives[1] = (values[1] == 5) ? 1 : 0;
pathCount[1] = 1;
queue.add(1);
while (!queue.isEmpty()) {
int u = queue.poll();
for (int v : adj[u]) {
int vFives = (values[v] == 5) ? 1 : 0;
int newFivesCount = maxFives[u] + vFives;
if (dist[v] == -1) {
dist[v] = dist[u] + 1;
maxFives[v] = newFivesCount;
pathCount[v] = pathCount[u];
queue.add(v);
}
else if (dist[v] == dist[u] + 1) {
if (newFivesCount > maxFives[v]) {
maxFives[v] = newFivesCount;
pathCount[v] = pathCount[u];
}
else if (newFivesCount == maxFives[v]) {
pathCount[v] += pathCount[u];
}
}
}
}
System.
out.
println("--- Results (Number of Shortest Paths + Max Fives) ---"); for (int i = 1; i <= n; i++) {
if (dist[i] == -1) {
System.
out.
println("Node " + i
+ ": Not Reachable"); } else {
long result = pathCount[i] + maxFives[i];
System.
out.
println("Node " + i
+ ": " + result
+ " (pathCount=" + pathCount
[i
] + ", maxFives=" + maxFives
[i
] + ")"); }
}
}
}