Pagini recente » Cod sursa (job #130198) | Cod sursa (job #672764) | Cod sursa (job #320145) | Cod sursa (job #375744) | Cod sursa (job #394865)
Cod sursa(job #394865)
#include<iostream>
#include<string>
using namespace std;
#define NM 5
#define MOD 666013
#define D 3
#define LL long long
void multiply(int A[NM][NM],int B[NM][NM],int C[NM][NM])
{
int ans[NM][NM];
for(int i=1;i<=D;++i)
for(int j=1;j<=D;++j)
{
ans[i][j]=0;
for(int k=1;k<=D;++k)
{
ans[i][j]+=((LL)A[i][k]*B[k][j])%MOD;
if(ans[i][j]>=MOD) ans[i][j]-=MOD;
}
}
for(int i=1;i<=D;++i)
for(int j=1;j<=D;++j)
C[i][j]=ans[i][j];
}
int main()
{
int M[NM][NM],R[NM][NM],T,A,B,C,X,Y,Z,N;
freopen("iepuri.in","r",stdin);
freopen("iepuri.out","w",stdout);
scanf("%d",&T);
while(T--)
{
scanf("%d %d %d %d %d %d %d",&X,&Y,&Z,&A,&B,&C,&N);
memset(R,0,sizeof(R));
for(int i=1;i<=D;++i)
R[i][i]=1;
memset(M,0,sizeof(M));
M[1][2]=1;
M[2][3]=1;
M[3][1]=C;
M[3][2]=B;
M[3][3]=A;
for(int i=0;i<=30 && N;++i)
{
if((1<<i)&N)
{
multiply(M,R,R);
N-=(1<<i);
}
multiply(M,M,M);
}
LL ans=((LL)X*R[1][1] + (LL)Y*R[1][2] + (LL)Z*R[1][3])%MOD;
printf("%I64d\n",ans);
}
return 0;
}