#include #include #include #include using namespace std; const int MAXD=15; const int STATE=1000010; const int HASH=300007; const int MOD=1000000007; int N,M,K; int maze[MAXD][MAXD]; int code[MAXD]; int ch[MAXD]; int num; struct HASHMAP { int head[HASH],next[STATE],size; long long state[STATE]; int f[STATE]; void init() { size=0; memset(head,-1,sizeof(head)); } void push(long long st,int ans) { int i; int h=st%HASH; for(i=head[h];i!=-1;i=next[i]) if(state[i]==st) { f[i]+=ans; f[i]%=MOD; return; } state[size]=st; f[size]=ans; next[size]=head[h]; head[h]=size++; } }hm[2]; void decode(int *code,int m,long long st) { num=st&63; st>>=6; for(int i=m;i>=0;i--) { code[i]=st&7; st>>=3; } } long long encode(int *code,int m) { int cnt=1; memset(ch,-1,sizeof(ch)); ch[0]=0; long long st=0; for(int i=0;i<=m;i++) { if(ch[code[i]]==-1)ch[code[i]]=cnt++; code[i]=ch[code[i]]; st<<=3; st|=code[i]; } st<<=6; st|=num; return st; } void shift(int *code,int m) { for(int i=m;i>0;i--)code[i]=code[i-1]; code[0]=0; } void dpblank(int i,int j,int cur) { int k,left,up; for(k=0;k=K)continue; int t=0; for(int p=0;p