#include #include #define maxn 150 #define mod 1000000007 struct matrix{ int v[70][70]; void clear(){ memset(v,0,sizeof(v)); } } a,b; int st_num[maxn],stn; int n,m; int ans; int f[10][10][maxn]; int q[2][maxn],qn[2]; void dfs(int p,int mask,int st){ if (p==n){ if ((mask&(1<>p)&1),c2=((mask>>p+1)&1); if (c1 && c2){ dfs(p+1,mask^(1<0) ret=mat_mul(ret,ta); ta=mat_mul(ta,ta); p>>=1; } return ret; } inline int getBit(int mask,int p){ return (mask>>p)&1; } inline void Add(int &x,int v){ x=(x+v)%mod; } int cal(int st1,int st2,int c1,int c2){ int ret=0; int now=0,next; qn[0]=1; q[0][0]=st1; memset(f,0,sizeof(f)); for (int i=0;i0) k++; if (k%2==0){ st_num[i]=stn++; } } a.clear(); for (int i=0;i<(1<-1) dfs(0,i<<1,i); b=Mul(m-n); ans=0; for (int i=0;i<(1<