#pragma GCC optimize(2) #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=39,M=150; int n,m,t; int h[N],e[M<<1],ne[M<<1],idx; int f[1000002][32]; //f[j,u]表示在j时刻,在节点u的情况数 void add(int a,int b) { e[idx]=b; ne[idx]=h[a]; h[a]=idx++; } int main() { memset(h,-1,sizeof h); cin>>n>>m; for(int i=1; i<=m; i++) { int a,b; cin>>a>>b; add(a,b),add(b,a); } //设置n+1为死亡节点 cin>>t; for(int i=1; i<=n; i++) add(i,n+1),add(i,i); f[0][1]=1; add(n+1,n+1); for(int j=0; j<=t; j++) for(int u=1; u<=n+1; u++) for(int i=h[u]; i!=-1; i=ne[i]) f[j+1][e[i]]=(f[j+1][e[i]]+f[j][u])%2017; int ans=0; for(int i=1; i<=n+1; i++) ans=(ans+f[t][i])%2017; cout<<ans<<endl; return 0; }