#include #define int long long using namespace std; int dfs(int i, vector>&adj, vector&visited, vector&a) { visited[i] = true; int total = 0; for (int j : adj[i]) { if (visited[j] == false) { total = (total + dfs(j, adj, visited, a)) % 998244353; } } return (total + a[i]) % 998244353; } void dfs1(vector&sum, int sum1, vector>&adj, int u) { sum[u] = sum1; for (int i : adj[u]) { if (sum[i] == -1) { dfs1(sum, sum1, adj, i); } } } signed main() { int n, m; cin >> n >> m; vector>adj(n + 1); vectora(n + 1); for (int i = 1; i <= n; ++i)cin >> a[i]; for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } vector sum(n + 1, -1); vectorvisited(n + 1, false); for (int i = 1; i <= n; ++i) { if (visited[i] == false) { //find sum of component int sum1 = dfs(i, adj, visited, a); dfs1(sum, sum1, adj, i); } } int ans = 1; for (int i = 1; i <= n; ++i) { ans = (ans * sum[i]) % 998244353; } cout << ans % 998244353 << endl; }