/** * Author: johnsondu * Time: 2013-5-5 * Problem: LightOj 1131 Just Two Functions * Url: http://www.lightoj.com/volume_showproblem.php?problem=1131 * Stratege: Matrix * s[N][N] = {a1, b1, 0, 0, 0, c1, * 1, 0, 0, 0, 0, 0, * 0, 1, 0, 0, 0, 0, * 0, 0, c2, a2, b2, 0, * 0, 0, 0, 1, 0, 0, * 0, 0, 0, 0, 1, 0} ; * **/ #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <cstring> using namespace std ; #define N 6 #define ll long long ll a1, b1, c1, a2, b2, c2 ; ll g[3], f[3] ; ll M, Q, n ; struct Node { ll mat[N][N] ; }unit, init ; void Init () { scanf ("%lld%lld%lld", &a1, &b1, &c1) ; scanf ("%lld%lld%lld", &a2, &b2, &c2) ; scanf ("%lld%lld%lld", &f[0], &f[1], &f[2]) ; scanf ("%lld%lld%lld", &g[0], &g[1], &g[2]) ; scanf ("%lld", &M) ; scanf ("%lld", &Q) ; memset (unit.mat, 0, sizeof (unit)) ; memset (init.mat, 0, sizeof (init)) ; for (int i = 0; i < N; i ++) unit.mat[i][i] = 1ll ; init.mat[0][0] = a1%M, init.mat[0][1] = b1%M, init.mat[0][5] = c1%M ; init.mat[3][2] = c2%M, init.mat[3][3] = a2%M, init.mat[3][4] = b2%M ; init.mat[1][0] = init.mat[2][1] = init.mat[4][3] = init.mat[5][4] = 1ll ; } Node mul (Node a, Node b) { Node c ; for (int i = 0; i < N; i ++) for (int j = 0; j < N; j ++) { c.mat[i][j] = 0 ; for (int k = 0; k < N; k ++) c.mat[i][j] += (ll)a.mat[i][k] * b.mat[k][j], c.mat[i][j] %= M ; } return c ; } void MatrixPow (ll p) { Node res = unit, tp = init ; while (p) { if (p & 1) { res = mul (res, tp) ; p -- ; continue ; } tp = mul (tp, tp) ; p >>= 1 ; } //printf ("--\n") ; ll resf = 0, resg = 0; for (int i = 0; i < 3; i ++) { resf += res.mat[0][i] * f[2-i] ; resg += res.mat[3][i] * f[2-i] ; } for (int i = 3; i < N; i ++) { resf += res.mat[0][i] * g[5-i] ; resg += res.mat[3][i] * g[5-i] ; } printf ("%lld %lld\n", resf%M, resg%M) ; } int main () { // freopen ("data.txt", "r", stdin) ; int tcase, cs = 1 ; scanf ("%d", &tcase) ; while (tcase --) { Init () ; printf ("Case %d:\n", cs ++) ; while (Q --) { scanf ("%lld", &n) ; if (n < 3) printf ("%lld %lld\n", f[n] % M, g[n] % M) ; else MatrixPow (n-2) ; } } return 0 ; }