/* 一开始对这个题目无法下手的,原来这是去年联合比赛的题目 */ #include <iostream> #include <cstdio> using namespace std; struct Mat { int num[2][2]; Mat() { for(int i = 0; i < 2; i++) for(int j = 0; j < 2; j++) num[i][j] = 0; } }; Mat mal(Mat a, Mat b, int mod) { Mat r; for(int i = 0; i < 2; i++) for(int k = 0; k < 2; k++) { if(a.num[i][k]) for(int j = 0; j < 2; j++) { if(b.num[k][j]) { r.num[i][j] =(r.num[i][j] + a.num[i][k] * b.num[k][j]) % mod; } } } return r; } Mat mul(Mat a, Mat b, int n, int mod) { while(n) { if(n & 1) { a = mal(a, b, mod); n--; } else { b = mal(b, b, mod); n >>= 1; } } return a; } int main() { int t; scanf("%d", &t); while(t--) { int n, mod; scanf("%d %d", &n, &mod); if(n == 0) { puts("0"); continue; } Mat init, unit; for(int i = 0; i < 2; i++) for(int j = 0; j < 2; j++) { init.num[i][j] = 0; unit.num[i][j] = 0; } init.num[0][0] = 1; unit.num[0][0] = 1; unit.num[0][1] = 1; unit.num[1][0] = 1; unit.num[1][1] = 0; Mat ans; ans = mul(init, unit, (2 * n - 1), mod); printf("%d/n", ans.num[0][0]); } }