#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int LL; typedef pair P; typedef pair LP; const int INF=1<<30; const LL MAX=1e9+7; void array_show(int *array,int array_n,char middle=' '){ for(int i=0;i &vec_s,int vec_n=-1,char middle=' '){ if(vec_n==-1)vec_n=vec_s.size(); for(int i=0;i &vec_s,int vec_n=-1,char middle=' '){ if(vec_n==-1)vec_n=vec_s.size(); for(int i=0;i>=1;b>0;b>>=1){ t*=t; if(t>=p)t%=p; if(n&b)t*=a; if(t>=p)t%=p; } return t; } namespace sol{ void init(){ } int calc2(int a){ return max(min(a+1,19-a),0); } LL solve(){ int n,m,p; int i,j,k; int a,b,c; cin>>n>>m>>p; if(n%3!=2 && m%3!=2){ if(0<=p && p<=9)return 1; return 0; } if(n%3!=2)swap(n,m); if(m%3!=2){ n=(n+2)/3,m=(m+2)/3; return pow_mod(calc2(p),m,MAX); } n=(n+2)/3,m=(m+2)/3; LL s=0; for(i=0;i<10;i++){ for(j=0;j<10;j++){ for(k=0;k<10;k++){ a=p-i-j-k; if(a<0 || a>=10)continue; s+=pow_mod(calc2(i+j)*calc2(k+a),n-1,MAX)*pow_mod(calc2(i+k)*calc2(j+a),m-1,MAX)%MAX; } } } return s%MAX; } } int main(){ int n,i; sol::init(); cin>>n; for(i=0;i