#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll=long long;
const ll mod=998244353;
ll n,m,d[200005],head[200005],cnt=1,sum=1;
bool vis[200005];
struct edge{
ll v,next;
}e[400005];
void add(int u,int v){
static int cnt=0;
e[++cnt]={v,head[u]};
head[u]=cnt;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i=1;i<=m;++i){
ll u,v;
cin >> u >> v;
add(u,v);
add(v,u);
}
vis[1]=d[1]=1;
while(1){
vector<ll>tmp;
for(int i=1;i<=n;++i){
if(vis[i])continue;
int c=0,s=0;
for(int j=head[i];j;j=e[j].next){
if(vis[e[j].v])++c,s=(s+d[e[j].v])%mod;
}
if(c==cnt)continue;
tmp.push_back(i);
d[i]=(sum-s+mod)%mod;
}
if(!tmp.size())break;
for(auto i:tmp){
vis[i]=1;
sum=(sum+d[i])%mod;
++cnt;
}
}
if(!vis[n])cout << -1 << endl;
else cout << d[n] << endl;
return 0;
}
评测寄录