Pagini recente » Cod sursa (job #378020) | Cod sursa (job #1968396) | Cod sursa (job #1472892) | Cod sursa (job #1820111) | Cod sursa (job #1465139)
#include <iostream>
#include <cstdio>
#define MOD 666013
#define LL long long
using namespace std;
void mult(LL a[3][3], LL b[3][3], LL rez[3][3])
{
int n = 3;
LL aux[n][n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
aux[i][j] = 0;
for (int i = 0; i < n; i++) // a lines
for (int j = 0; j < n; j++) // b columns
for (int k = 0; k < n; k++) // b lines / a columns
aux[i][j] = (aux[i][j] + (b[k][j]*a[i][k])%MOD)%MOD;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
rez[i][j] = aux[i][j];
}
int t, x, y, z, a, b, c, day;
void printMat(int mat[3][3])
{
// debug
for (int i = 0; i < 3; i++, printf("\n"))
for (int j = 0; j < 3; j++)
printf("%d ", mat[i][j]);
}
void rise(LL mat[3][3], int p)
{
LL rez[3][3];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
rez[i][j] = i==j ? 1 : 0;
for (int i = 0; p>>i; i++)
{
if ((p>>i)&1)
mult(rez, mat, rez);
mult(mat, mat, mat);
}
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
mat[i][j] = rez[i][j];
}
int solve()
{
LL m[3][3] = {{0, 0, c}, {1, 0, b}, {0, 1, a}};
rise(m, day-2);
return (x * m[0][2])%MOD + (y * m[1][2])%MOD + (z * m[2][2])%MOD;
}
int main()
{
freopen("iepuri.in", "r", stdin);
freopen("iepuri.out", "w", stdout);
scanf("%d", &t);
for (int i = 0; i < t; i++)
{
scanf("%d %d %d %d %d %d %d", &x, &y, &z, &a, &b, &c, &day);
if (i) printf("\n%d", solve());
else printf("%d", solve());
}
return 0;
}