#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int N=52,MOD=1e4; typedef long long ll; inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f; } int n,m,s,t,k,x,y,fish,f[15]; struct Mat{ int a[N][N]; Mat(){memset(a,0,sizeof(a));} void ini(){for(int i=1;i<=n;i++) a[i][i]=1;} }g[15],ans; inline Mat operator *(Mat A,Mat B){ Mat C; for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) if(A.a[i][k]) for(int j=1;j<=n;j++) if(B.a[k][j]) C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j])%MOD; return C; } inline Mat operator ^(Mat A,int k){ Mat ans;ans.ini(); for(;k;k>>=1,A=A*A) if(k&1) ans=ans*A; return ans; } void print(Mat A){ puts("hiMat"); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) printf("%d ",A.a[i][j]); puts(""); } } int main(){ //freopen("in.txt","r",stdin); n=read();m=read();s=read()+1;t=read()+1;k=read(); for(int i=1;i<=m;i++){ x=read()+1;y=read()+1; for(int j=1;j<=12;j++) g[j].a[x][y]=g[j].a[y][x]=1; } fish=read(); for(int i=1;i<=fish;i++){ int T=read(); for(int j=1;j<=T;j++) f[j]=read()+1; for(int j=1;j<=12;j++) for(int k=1;k<=n;k++) g[j].a[k][f[j%T+1]]=0; } g[0].ini(); for(int i=1;i<=12;i++) g[0]=g[0]*g[i]; ans=g[0]^(k/12); for (int i=1;i<=k%12;i++) ans=ans*g[i]; printf("%d",ans.a[s][t]); }
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。