Pagini recente » Cod sursa (job #2571422) | Borderou de evaluare (job #2029698) | Cod sursa (job #1981203) | Cod sursa (job #2239658) | Cod sursa (job #3148822)
#define _GLIBCXX_FILESYSTEM
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
long long t, n;
long long a[3][3], r[3][3], aux[3][3], X, Y, Z, A, B, C, N;
void inmultire(long long a[3][3], long long b[3][3], long long c[3][3]){
for(int i = 0; i <= 2; i++)
for(int j = 0; j <= 2; j++) {
c[i][j] = 0;
for(int k = 0; k <= 2; k++){
c[i][j] += a[i][k] * b[k][j];
c[i][j] %= MOD;
}
}
}
void copiere(long long a[3][3], long long b[3][3]){
for(int i = 0; i <= 2; i++)
for(int j = 0; j <= 2; j++)
a[i][j] = b[i][j];
}
void setid(long long a[3][3]){
for(int i = 0; i <= 2; i++)
for(int j = 0; j <= 2; j++)
if(i == j)
a[i][j] = 1;
else
a[i][j] = 0;
}
void setinit(long long x[3][3], long long a, long long b, long long c){
x[0][0] = a; x[0][1] = b; x[0][2] = c;
x[1][0] = 1; x[1][1] = 0; x[1][2] = 0;
x[2][0] = 0; x[2][1] = 1; x[2][2] = 0;
}
int main(){
for(fin >> t; t--;){
fin >> X >> Y >> Z >> A >> B >> C >> N;
setid(r);
setinit(a, A, B, C);
int b = N - 2;
while(b){
if(b % 2 == 1){
inmultire(r, a, aux);
copiere(r, aux);
}
inmultire(a, a, aux);
copiere(a, aux);
b /= 2;
}
fout << (r[0][0] * Z + r[0][1] * Y + r[0][2] * X) % MOD << '\n';
}
return 0;
}