#include #include #define repeat(i,n) for (int i = 0; (i) < (n); ++(i)) #define repeat_reverse(i,n) for (int i = (n)-1; (i) >= 0; --(i)) typedef long long ll; using namespace std; const int mod = 1e9+7; vector > operator * (vector > const & p, vector > const & q) { int n = p.size(); vector > r(n, vector(n)); repeat (y,n) { repeat (z,n) { repeat (x,n) { r[y][x] += p[y][z] * q[z][x] % mod; r[y][x] %= mod; } } } return r; } ll fib(ll n) { vector > f(2, vector(2)); vector > e(2, vector(2)); f[0][0] = f[1][1] = 1; e[0][0] = e[0][1] = e[1][0] = 1; for (ll i = 1; i <= n; i <<= 1) { if (n & i) f = f * e; e = e * e; } return f[0][0]; } int powi(int x, string const & d) { ll y = 1; int n = d.size(); repeat_reverse (i,n) { int c = d[i] - '0'; ll z = 1; repeat (j,10) { if (j == c) y = y * z % mod; z = z * x % mod; } x = z; } return y; } int main() { int n; cin >> n; ll ans = 1; repeat (i,n) { ll c; string d; cin >> c >> d; ans = ans * powi(fib(c+1), d) % mod; } cout << ans << endl; return 0; }