237092026-01-28 00:32:41abcdTrükkcpp17Accepted 60/6090ms1872 KiB
#include <bits/stdc++.h>
using namespace std;
using pii=pair<int,int>;

const int M=1e9+7;

bool dfs(vector<vector<int>>& adj, vector<int>& c, int v){
	for(int u:adj[v]){
		if(c[u]==0){
			if(c[v]==1)c[u]=2;
			else c[u]=1;
			if (!dfs(adj,c,u)) return false;
		}else if(c[u]==c[v])return false;
	}
	return true;
}

int main() {
	int t;cin>>t;
	while(t--){
		int n,k;cin>>n>>k;
		vector<vector<int>> adj(n+1);
		for(int i=0;i<k;i++){
			int a,b;cin>>a>>b;
			adj[a-1].push_back(b);
			adj[b].push_back(a-1);
		}
		vector<int> c(n+1);
		bool ok=true;
		int cnt=0;
		for(int i=0;i<=n;i++)
			if(c[i]==0){
				cnt++;
				if(!dfs(adj,c,i)) ok=false;
			}
		if(!ok){
			cout<<"0\n";
			continue;
		}
		int ans=1;
		for(int i=1;i<cnt;i++){
			ans=1LL*ans*2%M;
		}
		cout<<ans<<'\n';
	}
}
SubtaskSumTestVerdictTimeMemory
base60/60
1Accepted0/01ms316 KiB
2Accepted0/041ms1076 KiB
3Accepted3/31ms316 KiB
4Accepted3/31ms316 KiB
5Accepted3/31ms316 KiB
6Accepted3/31ms508 KiB
7Accepted2/286ms1632 KiB
8Accepted2/283ms1640 KiB
9Accepted2/286ms1800 KiB
10Accepted2/283ms1688 KiB
11Accepted2/286ms1668 KiB
12Accepted2/285ms1632 KiB
13Accepted2/272ms1300 KiB
14Accepted2/271ms1360 KiB
15Accepted2/272ms1368 KiB
16Accepted2/274ms1360 KiB
17Accepted2/272ms1396 KiB
18Accepted2/271ms1360 KiB
19Accepted2/290ms1848 KiB
20Accepted2/286ms1840 KiB
21Accepted2/286ms1872 KiB
22Accepted2/282ms1496 KiB
23Accepted2/283ms1784 KiB
24Accepted2/282ms1616 KiB
25Accepted2/283ms1712 KiB
26Accepted2/272ms1392 KiB
27Accepted2/287ms1624 KiB
28Accepted2/278ms1568 KiB
29Accepted2/235ms1028 KiB
30Accepted2/235ms1212 KiB