#include "bits/stdc++.h" using namespace std; long long mod = (long long)1e9 + 7; long long v1[2][2]; long long v2[2][2]; long long v3[2][2]; void fmatrix(){ v3[0][0] = v3[1][1] = 1; v3[1][0] = v3[0][1] = 0; } void v3tov1(){ v1[0][0] = v3[0][0]; v1[0][1] = v3[0][1]; v1[1][0] = v3[1][0]; v1[1][1] = v3[1][1]; } void v3tov2(){ v2[0][0] = v3[0][0]; v2[0][1] = v3[0][1]; v2[1][0] = v3[1][0]; v2[1][1] = v3[1][1]; } void matrixmul(){ for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { v3[i][j] = 0; } } for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { v3[i][j] += v1[i][k] * v2[k][j]; } v3[i][j] %= mod; } } } void matrixpowmod(long long p) { if (p == 0){ fmatrix(); } else if (p % 2 == 1){ long long temp[2][2]; temp[0][0] = v3[0][0]; temp[0][1] = v3[0][1]; temp[1][0] = v3[1][0]; temp[1][1] = v3[1][1]; matrixpowmod(p - 1); v3tov2(); v1[0][0] = temp[0][0]; v1[0][1] = temp[0][1]; v1[1][0] = temp[1][0]; v1[1][1] = temp[1][1]; matrixmul(); } else{ matrixpowmod(p / 2); v3tov1(); v3tov2(); matrixmul(); } } long long powmod(long long a, int p){ if (p == 0) return 1; if (p % 2 == 1){ return a * powmod(a, p - 1) % mod; } long long b = powmod(a, p / 2); return b * b % mod; } int main() { int N; cin >> N; long long ans = 1; long mod = (int)1e9 + 7; for (int i = 0; i < N; i++) { long long C; string SD; cin >> C >> SD; long long D = 0; for (int i = 0; i < SD.size(); i++) { D *= 10; D += SD[i] - '0'; D %= (mod - 1); } v3[0][0] = 1; v3[0][1] = 1; v3[1][0] = 1; v3[1][1] = 0; if (SD.size() != 1 && D == 0) D += mod; matrixpowmod(C); long long mul = v3[0][0] + v3[1][0]; mul %= mod; mul = powmod(mul, D); ans *= mul; ans %= mod; } cout << ans << endl; }