1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define mid ((l+r)/2)
#define siz(x) (int)(x).size()
#define BOOST ios_base::sync_with_stdio(0), cin.tie(0)
#define deb(x) cout << #x << ": " << x << "\n"
typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;

const int N = (1<<27) + 5;
bool vis[N];
vector<ii> go;
ll ans = 0;

void dfs(int x){
	vis[x] = 1;
	ans++;
	for(auto it : go){
		if(((x>>it.fi)&1) == ((x>>it.se)&1)){
			if(!vis[x^(1<<it.fi)^(1<<it.se)]){
				dfs(x^(1<<it.fi)^(1<<it.se));
			}
		}
	}
}

int main(){
	BOOST;
	int n, m, t = 0;
	cin >> n >> m;
	for(int i=0; i<n; i++){
		int x; cin >> x;
		t += (x<<i);
	}
	for(int i=0; i<m; i++){
		int a, b; cin >> a >> b;
		a--, b--;
		go.pb({a, b});
	}
	dfs(t);
	cout << ans << "\n";
}