227942026-01-15 18:36:56algoproTrükkcpp17Accepted 60/6086ms1872 KiB
// UUID: 191aef9e-f742-4079-b75d-8d6750758dbe
#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/31ms316 KiB
7Accepted2/285ms1776 KiB
8Accepted2/285ms1676 KiB
9Accepted2/285ms1604 KiB
10Accepted2/285ms1556 KiB
11Accepted2/285ms1612 KiB
12Accepted2/283ms1640 KiB
13Accepted2/272ms1184 KiB
14Accepted2/271ms1364 KiB
15Accepted2/272ms1288 KiB
16Accepted2/274ms1276 KiB
17Accepted2/272ms1392 KiB
18Accepted2/271ms1552 KiB
19Accepted2/286ms1868 KiB
20Accepted2/286ms1616 KiB
21Accepted2/285ms1872 KiB
22Accepted2/283ms1660 KiB
23Accepted2/283ms1616 KiB
24Accepted2/283ms1616 KiB
25Accepted2/283ms1616 KiB
26Accepted2/272ms1456 KiB
27Accepted2/285ms1784 KiB
28Accepted2/278ms1416 KiB
29Accepted2/235ms1168 KiB
30Accepted2/235ms1076 KiB