Pagini recente » Cod sursa (job #635994) | Cod sursa (job #3290360) | Cod sursa (job #300251) | Cod sursa (job #856402) | Cod sursa (job #2341588)
#include <fstream>
#include <cstring>
using namespace std;
#define mod 666013
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
int a[4][4], a1[4][4], aux[4][4], sol[4][4];
inline void Initializare(int A, int B, int C) {
a[1][1] = 0; a[1][2] = 1; a[1][3] = 0;
a[2][1] = 0; a[2][2] = 0; a[2][3] = 1;
a[3][1] = C; a[3][2] = B; a[3][3] = A;
sol[1][1] = 1; sol[1][2] = sol[1][3] = 0;
sol[2][1] = sol[2][3] = 0; sol[2][2] = 1;
sol[3][1] = sol[3][2] = 0; sol[3][3] = 1;
}
inline void Inmultire(int a1[4][4], int a2[4][4]) {
memset(aux, 0, sizeof(aux));
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
for (int k = 1; k <= 3; k++) {
aux[i][j] += (a1[i][k] * a2[k][j] * 1LL) % mod;
aux[i][j] %= mod;
}
}
}
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++)
a1[i][j] = aux[i][j];
}
}
inline void RidicareLaPutere(int N) {
while (N) {
if (N & 1) {
Inmultire(sol, a);
N--;
}
N >>= 1;
Inmultire(a, a);
}
}
inline void Read() {
int T, X, Y, Z, A, B, C, N;
fin >> T;
long long val;
while (T--) {
fin >> X >> Y >> Z >> A >> B >> C >> N;
if (N < 3) {
if (N == 0)
fout << X << "\n";
else if (N == 1)
fout << Y << "\n";
else
fout << Z << "\n";
continue;
}
Initializare(A, B, C);
RidicareLaPutere(N - 2);
val = 0;
val += sol[3][1] * 1LL * X;
val %= mod;
val += sol[3][2] * 1LL * Y;
val %= mod;
val += sol[3][3] * 1LL * Z;
val %= mod;
fout << val << "\n";
}
}
int main () {
Read();
fin.close(); fout.close(); return 0;
}