package main import . "fmt" import . "os" import bf "bufio" func main() { rd := bf.NewReader(Stdin) var n, m int Fscan(rd,&n,&m) a := make([]int, n+1) for i := range a[1:] { Fscan(rd,&a[i+1]) } g := make([][]int, n+1) for i := 0; i < m; i++ { var u,v int Fscan(rd,&u,&v) g[u] = append(g[u], v) g[v] = append(g[v], u) } score := make([]int, n+1) visited := make([]int, n+1) const Mod = 998244353 ans := 1 for i := 1; i <= n; i++ { if visited[i] > 0 { ans = ans*score[visited[i]]%Mod continue } visited[i] = i score[i] = a[i]%Mod stk := []int{i} for len(stk) > 0 { l := len(stk)-1 p := stk[l] stk = stk[:l] for _, e := range g[p] { if visited[e] > 0 { continue } visited[e] = i score[i] = (score[i]+a[e])%Mod stk = append(stk, e) } } ans = ans*score[i]%Mod } Println(ans) }