SquareMatrix pow(SquareMatrix m, int n) { SquareMatrix res; res.init(); for (; n > 0; n = n >> 1) { if (n & 1) { res = res * m; } m = m * m; } return res; }
int main() { LL tmp_a[SIZE][SIZE] = {{1, 4, 1, 0, 1}, {1, 0, 0, 0, 0}, {0, 2, 1, 0, 0}, {0, 1, 0, 0, 1}, {0, 0, 0, 1, 0}}; while (scanf("%d %d", &N, &M) && N != 0) { if (N == 1) { ans = 1; } else { A.init(tmp_a); A = pow(A, N - 2); ans = (A.a[0][0] * 5 + A.a[0][1] * 1 + A.a[0][2] * 2 + A.a[0][3] * 1 + A.a[0][4] * 0) % M; } printf("%d\n", ans); } return 0; }