#include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; using Matrix = vector>; Matrix operator*(const Matrix& A, const Matrix& B) { int n = A.size(); Matrix C(n, vector(n, 0)); for (int i = 0; i < n; i++) for (int k = 0; k < n; k++) for (int j = 0; j < n; j++) C[i][j] += A[i][k] * B[k][j]; return C; } Matrix matpow(Matrix A, ll n) { int sz = A.size(); Matrix res(sz, vector(sz, 0)); for (int i = 0; i < sz; i++) res[i][i] = 1; while (n > 0) { if (n & 1) res = res * A; A = A * A; n >>= 1; } return res; } int main() { int N, M; cin >> N >> M; vector> edges(M); vector deg(N, 0); for (auto& [u, v] : edges) { cin >> u >> v; u--; v--; deg[u]++; deg[v]++; } int A, B; ll S, T; cin >> S >> T >> A >> B; A--; B--; // 遷移確率行列 Matrix P(N, vector(N, 0)); for (auto [u, v] : edges) { P[u][v] = mint(1) / deg[u]; P[v][u] = mint(1) / deg[v]; } // P^(T-1) と P^(S-T) を計算 Matrix PT = matpow(P, T - 1); Matrix PST = matpow(P, S - T); // P^(S-1) = P^(T-1) * P^(S-T) Matrix PS = PT * PST; mint numerator = PT[0][B] * PST[B][A]; mint denominator = PS[0][A]; mint ans = numerator / denominator; cout << ans.val() << endl; }