# https://yukicoder.me/problems/no/3635 MOD = 998244353 def prod_matrix(left, right): n = len(left) new_matrix = [[0] * n for _ in range(n)] for i in range(n): for j in range(n): for k in range(n): new_matrix[i][j] += (left[i][k] * right[k][j]) % MOD new_matrix[i][j] %= MOD return new_matrix def prod_vector(matrix, vector): n = len(vector) new_vector = [0] * n for i in range(n): for j in range(n): new_vector[i] += (matrix[i][j] * vector[j]) % MOD new_vector[i] %= MOD return new_vector def prob(N, base_matrix, interval_time, start_i, end_i): matrix = [] for row in base_matrix: matrix.append(row.copy()) vector = [0] * N vector[start_i] = 1 while interval_time > 0: if interval_time % 2 == 1: vector = prod_vector(matrix, vector) matrix = prod_matrix(matrix, matrix) interval_time //= 2 return vector[end_i] def main(): N, M = map(int, input().split()) next_nodes = [[] for _ in range(N)] for _ in range(M): u,v = map(int, input().split()) next_nodes[u - 1].append(v - 1) next_nodes[v - 1].append(u - 1) S, T, A, B = map(int, input().split()) A -= 1 B -= 1 matrix = [[0] * N for _ in range(N)] for from_i in range(N): n = len(next_nodes[from_i]) inv_n = pow(n, MOD - 2, MOD) for to_i in next_nodes[from_i]: matrix[to_i][from_i] = inv_n prob_b = prob(N, matrix, T - 1, 0, B) prob_a = prob(N, matrix, S - 1, 0, A) prob_b_to_a = prob(N, matrix, S - T, B, A) answer = (prob_b_to_a * prob_b) % MOD answer *= pow(prob_a, MOD - 2, MOD) answer %= MOD print(answer) if __name__ == "__main__": main()