题目描述:
解题说明:
AC代码:
#include<bits/stdc++.h>
#define ag(x) ((x)>3?(x)-3:(x)+3)
using namespace std;
typedef long long ll;
ll mod=1e9+7;
struct matrix{
int n,m;
ll s[10][10];
};
matrix Aunit(matrix A){
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
A.s[i][j]=4;
}
}
return A;
}
matrix unit(matrix A){
matrix re;
re.n=A.n;re.m=A.m;
for(int i=0;i<re.n;i++){
for(int j=0;j<re.m;j++){
if(i==j)re.s[i][j]=1;
else re.s[i][j]=0;
}
}
return re;
}
matrix mix(matrix A,matrix B){
matrix re;re.n=A.n;re.m=B.m;
for(int i=0;i<re.n;i++){
for(int j=0;j<re.m;j++){
re.s[i][j]=0;
for(int k=0;k<A.m;k++){
re.s[i][j]+=A.s[i][k]*B.s[k][j]%mod;
re.s[i][j]%=mod;
}
}
}
return re;
}
matrix dpow(matrix A,ll b){
matrix re;
re=unit(A);
while(b){
if(b&1)re=mix(re,A);
A=mix(A,A);
b>>=1;
}
return re;
}
int main(){
ll n,m;
scanf("%lld%lld",&n,&m);
matrix A;A.n=6;A.m=6;
A=Aunit(A);
int ip1,ip2;
while(m--){
scanf("%d%d",&ip1,&ip2);
A.s[ip2-1][ag(ip1)-1]=0;
A.s[ip1-1][ag(ip2)-1]=0;
}
matrix p;p.n=1;p.m=6;
for(int j=0;j<6;j++)p.s[0][j]=4;
A=dpow(A,n-1);
p=mix(p,A);
ll ans=0;
for(int j=0;j<6;j++)ans=(ans+p.s[0][j])%mod;
printf("%lld\n",ans);
return 0;
}