#include #include #include using namespace std; struct sta{ int s[4]; }; struct node{ int m[8][8]; }res,temp,mod; int getnum( sta a ) { int m,n,index; m=n=0; for( int i=0;i<4;i++ ) if( mn?m:n; } int h[4444]; void dfs( sta a,sta b,int at ) { if( at>3 ) { int n1=getnum(a); int n2=getnum(b); temp.m[h[n1]][h[n2]]++; return ; } for( int i=0;i<=a.s[at];i++ )//1->2 for( int j=0;i+j<=a.s[at];j++ )//1->0 { sta x=b; x.s[at]=x.s[at]-i-j; x.s[(at+1)%4]+=i; x.s[(at+3)%4]+=j; dfs( a,x,at+1 ); } } node matriXmult( node a,node b ) { node c; memset( c.m,0,sizeof(c.m) ); for( int i=0;i<8;i++ ) for( int k=0;k<8;k++ ) if( a.m[i][k] ) for( int j=0;j<8;j++ ) c.m[i][j]+=a.m[i][k]*b.m[k][j]; for( int i=0;i<8;i++ ) for( int j=0;j<8;j++ ) c.m[i][j]%=9937; return c; } void matrixPower( int n ) { memset( res.m,0,sizeof(res.m) ); for( int i=0;i<8;i++ ) { res.m[i][i]=1; for( int j=0;j<8;j++ ) mod.m[i][j]=temp.m[i][j]; } for( int i=0;i<32;i++ ) { if( n&(1<