留个教训T^T,a 和b忘记清零改了半天
const ll mod=998244353;
ll qpow(ll a,ll b)//a^b//快速幂
{
if(b==0) return 1;
a%=mod;
ll ans=1,temp=a;
while(b)
{
if(b&1) ans=(ans*temp)%mod;
temp=(temp*temp)%mod;
b>>=1;
}
return ans%mod;
}
int n,m,flag;
int col[MX];//颜色
set<int>mp[MX];
ll a,b;
void dfs(int x,int pre)
{
if(flag==0) return;
col[x]=2-pre;
if(col[x]) ++a;
else ++b;
for(auto it=mp[x].begin();it!=mp[x].end();++it)
{
int v=*it;
if(col[v]==col[x])
{
flag=0;
return;
}
if(col[v]==-1) dfs(v,col[x]);
}
}
inline void solve()
{
cin>>n>>m;
rpp(i,n) mp[i].clear(),col[i]=-1;
flag=1;
rpp(i,m)
{
int x,y;cin>>x>>y;
mp[x].insert(y);
mp[y].insert(x);
}
ll ans=1;
rpp(i,n)
{
if(col[i]!=-1) continue;
a=0,b=0;
dfs(i,0);
if(flag==0) break;
ll tmp=(qpow(2,a)+qpow(2,b))%mod;
ans = (ans*tmp)%mod;
}
if(flag==0) ans=0;
cout<<ans<<endl;
}