#include<bits/stdc++.h>
#define ll long long
#define l long
#define mk make_pair
#define pb push_back
#define in insert
#define se second
#define fi first
#define mod 998244353
#define watch(x) cout << (#x) << " is " << (x) << "\n"
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL);
#define pii pair<int,int>
using namespace std;
ll ar[3],n,m;
bool bad;
bool vi[300005];
vector<ll> v[300005];
ll p2[300005];
ll color[300005];
bool dfs(ll so)
{
ll i;
vi[so] = true;
stack<ll> s;
s.push(so);
color[so] = 1;
bool ok = true;
ar[1]++;
while(!s.empty())
{
ll st = s.top();
s.pop();
for(i = 0;i<v[st].size();i++)
{
ll u = v[st][i];
if(!vi[u])
{
vi[u] = true;
color[u] = 3 - color[st];
ar[color[u]]++;
s.push(u);
}
else if(color[u]==color[st])
{
ok = false;
break;
}
}
}
return ok;
}
int main()
{
fast;
#ifndef ONLINE_JUDGE
freopen("input.txt","r", stdin);
freopen("output.txt","w",stdout);
#endif
int t;
cin>>t;
p2[0] = 1;
//cout<<"hi";
for(ll i = 1;i<=300000;i++)
{
p2[i] = (2 * p2[i - 1]) % mod;
}
while(t--)
{
ll i;
cin>>n>>m;
bad = false;
for(i=1;i<=n;i++)
{
vi[i] = false;
color[i] = 0;
v[i].clear();
}
for(i=0;i<m;i++)
{
ll x,y;
cin>>x>>y;
v[x].pb(y);
v[y].pb(x);
}
ar[1] = 0,ar[2] = 0;
ll ans = 1;
for(i=1;i<=n;i++)
{
if(!vi[i])
{
ar[1] = 0,ar[2] = 0;
bool ok = dfs(i);
if(ok)
{
ll cur = (p2[ar[1]]%mod + p2[ar[2]]%mod)%mod;
ans = (ans*(cur%mod))%mod;
}
else
{
bad = true;
break;
}
}
}
if(bad) ans=0;
cout<<ans<<"\n";
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBsIGxvbmcKI2RlZmluZSBtayBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBpbiBpbnNlcnQKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIG1vZCA5OTgyNDQzNTMKI2RlZmluZSB3YXRjaCh4KSBjb3V0IDw8ICgjeCkgPDwgIiBpcyAiIDw8ICh4KSA8PCAiXG4iCiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsKI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpsbCBhclszXSxuLG07CmJvb2wgYmFkOwpib29sIHZpWzMwMDAwNV07CnZlY3RvcjxsbD4gdlszMDAwMDVdOwpsbCBwMlszMDAwMDVdOwpsbCBjb2xvclszMDAwMDVdOwpib29sIGRmcyhsbCBzbykKewoJbGwgaTsKCXZpW3NvXSA9IHRydWU7CglzdGFjazxsbD4gczsKCXMucHVzaChzbyk7Cgljb2xvcltzb10gPSAxOwoJYm9vbCBvayA9IHRydWU7CglhclsxXSsrOwoJd2hpbGUoIXMuZW1wdHkoKSkKCXsKCQlsbCBzdCA9IHMudG9wKCk7CgkJcy5wb3AoKTsKCQlmb3IoaSA9IDA7aTx2W3N0XS5zaXplKCk7aSsrKQoJCXsKCQkJbGwgdSA9IHZbc3RdW2ldOwoJCQlpZighdmlbdV0pCgkJCXsKCQkJCXZpW3VdID0gdHJ1ZTsKCQkJCWNvbG9yW3VdID0gMyAtIGNvbG9yW3N0XTsKCQkJCWFyW2NvbG9yW3VdXSsrOwoJCQkJcy5wdXNoKHUpOwoJCQl9CgkJCWVsc2UgaWYoY29sb3JbdV09PWNvbG9yW3N0XSkKCQkJewoJCQkJb2sgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwoJCQl9CgkJfQoJfQoJcmV0dXJuIG9rOwp9CmludCBtYWluKCkKewogICAgZmFzdDsKICAgICNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsInciLHN0ZG91dCk7CiAgICAjZW5kaWYKICAgIGludCB0OwogICAgY2luPj50OwogICAgcDJbMF0gPSAxOwogICAgLy9jb3V0PDwiaGkiOwogICAgZm9yKGxsIGkgPSAxO2k8PTMwMDAwMDtpKyspCiAgICB7CiAgICAJcDJbaV0gPSAoMiAqIHAyW2kgLSAxXSkgJSBtb2Q7IAogICAgfQogICAgd2hpbGUodC0tKQogICAgewogICAgCWxsIGk7CiAgICAJY2luPj5uPj5tOwogICAgICAgIGJhZCA9IGZhbHNlOwogICAgICAgIGZvcihpPTE7aTw9bjtpKyspCiAgICAgICAgewogICAgICAgICAgICB2aVtpXSA9IGZhbHNlOwogICAgICAgICAgICBjb2xvcltpXSA9IDA7CiAgICAgICAgICAgIHZbaV0uY2xlYXIoKTsKICAgICAgICB9CiAgICAJZm9yKGk9MDtpPG07aSsrKQogICAgCXsKICAgIAkJbGwgeCx5OwogICAgCQljaW4+Png+Pnk7CiAgICAgICAgICAgIHZbeF0ucGIoeSk7CiAgICAgICAgICAgIHZbeV0ucGIoeCk7CiAgICAJfQogICAgICAgIGFyWzFdID0gMCxhclsyXSA9IDA7CiAgICAgICAgbGwgYW5zID0gMTsKICAgICAgICBmb3IoaT0xO2k8PW47aSsrKQogICAgICAgIHsKICAgIAkgICAgaWYoIXZpW2ldKQogICAgCSAgICB7CiAgICAJICAgIAlhclsxXSA9IDAsYXJbMl0gPSAwOwogICAgCSAgICAJYm9vbCBvayA9IGRmcyhpKTsKICAgIAkgICAgCWlmKG9rKQogICAgCSAgICAJewogICAgCSAgICAJCWxsIGN1ciA9IChwMlthclsxXV0lbW9kICsgcDJbYXJbMl1dJW1vZCklbW9kOwogICAgCSAgICAJCWFucyA9IChhbnMqKGN1ciVtb2QpKSVtb2Q7CiAgICAJICAgIAl9CiAgICAJICAgIAllbHNlCiAgICAJICAgIAl7CiAgICAJICAgIAkJYmFkID0gdHJ1ZTsKICAgIAkgICAgCQlicmVhazsKICAgIAkgICAgCX0KICAgIAkgICAgfQogICAgICAgIH0KICAgICAgICBpZihiYWQpIGFucz0wOwogICAgICAgIGNvdXQ8PGFuczw8IlxuIjsKICAgIH0KfQ==