Pagini recente » Cod sursa (job #38768) | Cod sursa (job #92486) | Cod sursa (job #1687274) | Cod sursa (job #2938741) | Cod sursa (job #774834)
Cod sursa(job #774834)
#include <fstream>
#include <cstdio>
#include <cstring>
#define MOD 666013
using namespace std;
FILE* fin=fopen("iepuri.in","r");
FILE* fout=fopen("iepuri.out","w");
const int maxb=8192;
char buf[maxb];
int ptr=0;
inline int getint() {
int nr=0;
while(buf[ptr]<'0'||'9'<buf[ptr])
if (++ptr>=maxb) fread(buf,maxb,1,fin),ptr=0;
while ('0'<=buf[ptr]&&buf[ptr]<='9') {
nr=nr*10+buf[ptr]-'0';
if (++ptr>=maxb) fread(buf,maxb,1,fin),ptr=0;
}
return nr;
}
int A,B,C,X,Y,Z,N;
int M1[3][3],MX[3][3],AX[3][3],R[3][3];
void Multiply (int A[3][3], int B[3][3], int C[3][3])
{
int i,j,k;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
{
C[i][j]=0;
for (k=0; k<3; k++)
{
C[i][j]+=1LL*A[i][k]*B[k][j]%MOD;
if (C[i][j]>=MOD) C[i][j]-=MOD;
}
}
for (i=0;i<3;i++)
for (j=0;j<3;j++)
A[i][j]=C[i][j];
}
void LgPow (int P)
{
int i,j;
memset(R,0,sizeof(R));
R[0][0]=R[1][1]=R[2][2]=1;
for (i=1; i<=P; i<<=1)
{
if (i&P)
Multiply(R,MX,AX);
Multiply(MX,MX,AX);
}
memcpy(MX,R,sizeof(MX));
}
int Solve ()
{
memset(M1,0,sizeof(M1));
M1[0][0]=Z;
M1[0][1]=Y;
M1[0][2]=X;
memset(MX,0,sizeof(MX));
MX[0][0]=A;
MX[0][1]=1;
MX[1][0]=B;
MX[1][2]=1;
MX[2][0]=C;
LgPow(N);
Multiply(M1,MX,AX);
return M1[0][0];
}
int T;
int main ()
{
for (T=getint(); T; --T)
{
X=getint();Y=getint();Z=getint();
A=getint();B=getint();C=getint();
N=getint();
N-=2;
fprintf(fout,"%d\n",Solve());
}
fclose(fin);
fclose(fout);
return 0;
}