Cod sursa(job #969307)
#include <fstream>
#include <cstring>
#define X 666013
#define D 5
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int t,x,y,z,a,b,c,n,Z[D][D], Sol[D][D];
//in Sol intra puterea lui Z
//C=A*B // mod X
void mult(int A[][D], int B[][D], int C[][D])
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < 3; k++)
C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j]) % X;
}
void ExponentiereRapida(int P,int Sol[][D])
{
int C[D][D], AUX[D][D];
memcpy(C, Z, sizeof(Z));
Sol[0][0]=Sol[1][1]=Sol[2][2]=1;
while(P!=1)
if(P % 2==0)
{
memset(AUX, 0, sizeof(AUX));
mult(C, C, AUX);
memcpy(C, AUX, sizeof(C));
P/=2;
}
else
{
memset(AUX, 0, sizeof(AUX));
mult(Sol,C,AUX);
memcpy(Sol,AUX,sizeof(AUX));
P--;
}
memset(AUX, 0, sizeof(AUX));
mult(C,Sol,AUX);
memcpy(Sol,AUX,sizeof(AUX));
}
void Solve()
{
f>>x>>y>>z>>a>>b>>c>>n;
n-=2;
Z[0][0]=0; Z[0][1]=1; Z[0][2]=0;
Z[1][0]=0; Z[1][1]=0; Z[1][2]=1;
Z[2][0]=c; Z[2][1]=b; Z[2][2]=a;
memset(Sol,0,sizeof(Sol));
ExponentiereRapida(n,Sol);
g<<x*Sol[2][0]+y*Sol[2][1]+z*Sol[2][2]<<'\n';
}
int main()
{
f>>t;
for(int i=1;i<=t;i++)Solve();
f.close();g.close();
return 0;
}