228002026-01-15 18:39:12algoproTrükkcpp17Accepted 60/6037ms3284 KiB
// UUID: c8084b56-a781-4c3b-bfbc-9eeb7a5b661f
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using pll=pair<ll, ll>;

vector<vector<ll>> parent;
vector<ll> check;

bool bad;

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;
}

void dfs(ll x){
	for (auto& z:parent[x]){
		if (check[z]==-1){
			check[z]=(check[x]+1)%2;
			dfs(z);
		}
		else{
			if (check[z]==check[x]){
				bad=true;
				return;
			}
		}
	}
}

void v(){
	ll n, k; cin >> n >> k;
	bad=false;
	parent.assign(n+1, {});
	check.assign(n+1, -1);
	for (ll i=0; i<k; i++){
		ll a, b; cin >> a >> b;
		parent[a-1].push_back(b);
		parent[b].push_back(a-1);
	}
	ll out=-1;
	for (ll i=0; i<n+1; i++){
		if (check[i]==-1){
			out++;
			check[i]=0;
			dfs(i);
		}
		if (bad){
			cout << 0 << '\n';
			return;
		}
	}
	cout << fastPow(2, out) << '\n';
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	ll t; cin >> t;
	while (t--) v();
}
SubtaskSumTestVerdictTimeMemory
base60/60
1Accepted0/01ms316 KiB
2Accepted0/017ms1332 KiB
3Accepted3/31ms512 KiB
4Accepted3/31ms316 KiB
5Accepted3/31ms332 KiB
6Accepted3/31ms316 KiB
7Accepted2/235ms2424 KiB
8Accepted2/235ms2344 KiB
9Accepted2/235ms2440 KiB
10Accepted2/235ms2236 KiB
11Accepted2/234ms2304 KiB
12Accepted2/234ms2120 KiB
13Accepted2/230ms3124 KiB
14Accepted2/232ms3260 KiB
15Accepted2/232ms3124 KiB
16Accepted2/232ms3232 KiB
17Accepted2/232ms3124 KiB
18Accepted2/232ms3284 KiB
19Accepted2/235ms2352 KiB
20Accepted2/235ms2492 KiB
21Accepted2/235ms2484 KiB
22Accepted2/235ms2452 KiB
23Accepted2/235ms2612 KiB
24Accepted2/235ms2500 KiB
25Accepted2/235ms2612 KiB
26Accepted2/230ms3212 KiB
27Accepted2/237ms2360 KiB
28Accepted2/232ms2120 KiB
29Accepted2/217ms2100 KiB
30Accepted2/216ms2100 KiB