1006 (dfs)
#include <bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; const double eps = 1e-6; const int N = 3e5+7; typedef long long ll; const ll mod = 998244353 ; using namespace std; vector<int> G[N]; int d[N],vis[N]; ll qpow(ll a,ll b){ ll ans=1; ll base=a; while(b){ if(b&1) ans=ans*base%mod; base=base*base%mod; b>>=1; } return ans; } ll res=1; ll num=0; void dfs(int u,int fa,int cnt){ //cout<<u<<endl; d[u]=cnt; for(int i=0;i<G[u].size();i++){ int v=G[u][i]; if(v==fa) continue; if(!vis[v]){ vis[v]=1; dfs(v,u,cnt+1); vis[v]=2; }else if(vis[v]==1){ //cout<<cnt-d[v]+1<<endl; res=res*(qpow(2,cnt-d[v]+1)-1)%mod; num+=(cnt-d[v]+1); }else if(vis[v]==2){ } } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,m; while(cin>>n>>m){ for(int i=1;i<=n;i++) G[i].clear(); memset(vis,0,sizeof(vis)); memset(d,0,sizeof(d)); res=1; num=0; for(int i=1;i<=m;i++){ int u,v; cin>>u>>v; G[u].push_back(v); G[v].push_back(u); } vis[1]=1; dfs(1,0,1); // for(int i=1;i<=n;i++) // cout<<d[i]<<endl; // cout<<res<<endl; //cout<<num<<endl; cout<<res*qpow(2,m-num)%mod<<endl; } return 0; }