227842026-01-15 18:28:39algoproTrükkcpp17Wrong answer 0/6035ms2340 KiB
// UUID: 7ebfff81-70a8-4755-86a9-ea5bc8c4880c
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<bool> vis;
vector<int> parity;
vector<vector<int>> g;
vector<array<int,2>> iv;

void dfs(int u,int p){
	vis[u]=1; parity[u]=p;
	for (int v:g[u]){
		if (!vis[v]) dfs(v,1-p);
	}
}

ll fastPow(ll a, ll b, ll mod = 1e9+7){
	if (b == 0) return 1;
	if (b == 1) return a;
	ll res = fastPow(a, b / 2);
	if (b & 1) return res * res % mod * a % mod;
	return res * res % mod;
}

int main() {
	int t; cin >> t;
	for (int j=0;j<t;j++){
		int n,k; cin >> n >> k;
		vis.assign(n + 1,0); g.assign(n + 1,vector<int>()); parity.assign(n + 1,0);
		for (int i=0;i<k;i++){
			int u,v; cin >> u >> v;
			g[u-1].push_back(v);
			g[v].push_back(u-1);
			iv.push_back({u - 1,v});
		}
		int c=0;
		for (int i=0;i<=n;i++){
			if (!vis[i]) {dfs(i,0); c++;}
		}
		for (auto i:iv){
			if (parity[i[0]]==parity[i[1]]){
				cout << 0; return 0;
			}
		}
		cout << fastPow(2, c-1) << '\n';
	}
}
SubtaskSumTestVerdictTimeMemory
base0/60
1Accepted0/01ms316 KiB
2Wrong answer0/017ms1332 KiB
3Wrong answer0/31ms316 KiB
4Wrong answer0/31ms316 KiB
5Wrong answer0/31ms316 KiB
6Wrong answer0/31ms316 KiB
7Wrong answer0/235ms2056 KiB
8Wrong answer0/220ms1640 KiB
9Wrong answer0/219ms1824 KiB
10Wrong answer0/235ms2224 KiB
11Wrong answer0/235ms2128 KiB
12Wrong answer0/218ms1712 KiB
13Wrong answer0/230ms1772 KiB
14Wrong answer0/217ms1420 KiB
15Wrong answer0/216ms1332 KiB
16Wrong answer0/232ms2000 KiB
17Wrong answer0/230ms2020 KiB
18Wrong answer0/217ms1456 KiB
19Wrong answer0/235ms2340 KiB
20Wrong answer0/219ms1904 KiB
21Wrong answer0/235ms2300 KiB
22Wrong answer0/219ms1580 KiB
23Wrong answer0/218ms1712 KiB
24Wrong answer0/218ms1712 KiB
25Wrong answer0/219ms1712 KiB
26Wrong answer0/216ms1456 KiB
27Wrong answer0/219ms1664 KiB
28Wrong answer0/217ms1620 KiB
29Wrong answer0/216ms1332 KiB
30Wrong answer0/28ms1076 KiB