Pagini recente » Cod sursa (job #2121756) | Cod sursa (job #725728) | Cod sursa (job #1326245) | Cod sursa (job #1882655) | Cod sursa (job #3124149)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MOD = 666013;
int t,x,y,z,a,b,c,n;
int f[3][3],p[3][3],m[3][3],aux[3][3];
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
void mult(int a[3][3], int b[3][3], int c[3][3]){
/// c = a*b
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
c[i][j] = 0;
for(int k = 0; k < 3; k++){
c[i][j] += (a[i][k]*b[k][j])%MOD;
if(c[i][j] > MOD){
c[i][j] -= MOD;
}
}
}
}
}
signed main()
{
fin >> t;
while(t--){
memset(f, 0, sizeof(f));
memset(m, 0, sizeof(m));
memset(p, 0, sizeof(p));
fin >> x >> y >> z >> a >> b >> c >> n;
if(n == 1){
fout << x << "\n";
continue;
}else if(n == 2){
fout << y << "\n";
continue;
}else if(n == 3){
fout << z << "\n";
continue;
}
n -= 3;
f[0][0] = z; f[1][0] = y; f[2][0] = x;
/// f = [z]
/// [y]
/// [x]
p[0][0] = p[1][1] = p[2][2] = 1;
/// p = [1 0 0]
/// [0 1 0]
/// [0 0 1]
m[0][0] = a; m[0][1] = b; m[0][2] = c;
m[1][0] = m[2][1] = 1;
/// m = [a b c]
/// [1 0 0]
/// [0 1 0]
while(n){
if(n&1){
mult(p, m, aux);
memcpy(p, aux, sizeof(aux));
}
mult(m, m, aux);
memcpy(m, aux, sizeof(aux));
n >>= 1;
}
mult(p, f, aux);
memcpy(f, aux, sizeof(aux));
fout << ((a*f[0][0])%MOD + (b*f[1][0])%MOD + (c*f[2][0])%MOD)%MOD << "\n";
}
return 0;
}