Pagini recente » Cod sursa (job #1545873) | Cod sursa (job #2968954) | Cod sursa (job #53091) | Cod sursa (job #2726890) | Cod sursa (job #1343324)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
class mat {
private:
static const int MOD = 666013;
int a[3][3];
public:
mat() {
memset(a, 0, sizeof(a));
a[0][0] = a[1][1] = a[2][2] = 1;
}
mat(int x, int y, int z, bool t) {
memset(a, 0, sizeof(a));
if(t) {
a[0][0] = x;
a[0][1] = y;
a[0][2] = z;
}
else {
a[0][2] = x;
a[1][2] = y;
a[2][2] = z;
a[1][0] = a[2][1] = 1;
}
}
mat operator * (const mat &o) const {
mat ans(0, 0, 0, true);
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
for(int k = 0; k < 3; k++) {
ans.a[i][j] = ((long long)ans.a[i][j] + a[i][k] * o.a[k][j]) % MOD;
}
}
}
return ans;
}
int getAns() {
return a[0][2];
}
};
mat put(const mat &a, int p) {
if(p == 0) {
return mat();
}
if(p & 1) {
return put(a, p - 1) * a;
}
mat b = put(a, p / 2);
return b * b;
}
int main() {
int t;
for(fin >> t; t; t--) {
int a, b, c, x, y, z, n;
fin >> a >> b >> c >> x >> y >> z >> n;
mat ans(a, b, c, true);
mat r(z, y, x, false);
r = put(r, n - 2);
ans = ans * r;
fout << ans.getAns() << '\n';
}
return 0;
}