#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define MAX 100050
#define ll long long
#define ld long double
#define lli long long int
#define pb push_back
#define INF 100000000000000
#define mod 1000000007
// trignometric function always give value in Radians only
#define PI acos(-1) //3.1415926535897932384626433832795028
#define dsin(degree) sin(degree*(PI/180.0))
#define dcos(degree) cos(degree*(PI/180.0))
#define dtan(degree) tan(degree*(PI/180.0))
#define rsin(radian) sin(radian)
#define rcos(radian) cos(radian)
#define rtan(radian) tan(radian)
#define counttrailingzeroes(n) __builtin_ctzll(n)
#define countsetbits(n) __builtin_popcountll(n)
#define mem0(a) memset(a,0,sizeof(a))
#define mem1(a) memset(a,-1,sizeof(a))
#define memf(a) memset(a,false,sizeof(a))
#define loop(i,n) for (lli i = 0; i < n; i++)
#define FOR(i,a,b) for (lli i = a; i < b; i++)
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define makeuniq(v) v.resize(unique(all(v)) - v.begin()); //only uniq element in vector after this
#define sz(x) int(x.size())
#define F first
#define S second
#define mii map<lli,lli>
#define pii pair<lli,lli>
#define vi vector<lli>
#define vvi vector<vi>
#define vpi vector<pii>
#define vbool vector<bool>
#define seti set<lli>
#define gcd(a,b) __gcd((a),(b))
#define lcm(a,b) (a/gcd(a,b))*b
#define abs(x) ((x < 0)?-(x):x)
#define isvowel(v) (0x208222>>(v&0x1f))&1
#define endl '\n'
template <typename Head>
void print(Head&& head)
{
cout<<head<<endl;
}
template <typename Head, typename... Tail>
void print(Head&& head, Tail... tail)
{
cout<<head<<" ";
print(tail...);
}
#define scanarr(a,n) for(lli i=0;i<n;i++) cin>>a[i];
#define scanvec(a,n) for(lli i=0;i<n;i++){ lli x ; cin>>x; a.pb(x);}
#define printarr(a,n) for(lli i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl;
#define printvec(vec) for(auto xt : vec) cout<<xt<<" "; cout<<"\n";
#define FD(N) fixed<<setprecision(N)
#define deb(x) cout<<#x<<" "<<x<<endl;
/*
1D vector - vi dp(n,value);
*/
lli mceil(lli a,lli b){ return(a/b + (a%b != 0)); }
lli mfloor(lli a,lli b){ return(a/b); }
ll modmul(ll a, ll b,ll MOD = mod) {
return ((a%MOD) * (b%MOD)) % MOD;
}
ll modadd(ll a, ll b,ll MOD = mod){
return((a%MOD)+(b%MOD)+MOD)%MOD;
}
ll modsub(ll a, ll b,ll MOD = mod){
return((a%MOD) - (b%MOD) + MOD)%MOD;
}
lli fastexpo(lli a,lli b ,lli MOD = mod){
a = a%MOD;
lli ans=1;
while(b){
if(b&1)
ans=(ans*1ll*a)%MOD;
a=(a*1ll*a)%MOD;
b=b/2;
}
return ans;
}
vector<int>all_div[200001];
void alldivisors(){
for(int i=1;i<=200000;++i){
for(int j=i;j<=200000;j+=i)
all_div[j].pb(i);
}
}
bool ispower2(lli n){
return(n and (n&(n-1))==0 );
}
mii mp;
void fun(lli n,lli pw)
{
lli cnt=0;
while(n%2==0)
{
cnt++;
n/=2;
}
if(cnt)
mp[2]=modadd(mp[2] , cnt*pw);
for(lli i=3;i*i<=n;i++)
{
cnt=0;
while(n%i==0)
{
cnt++;
n/=i;
}
if(cnt)
mp[i]=modadd(mp[i] , cnt*pw);
}
if(n>1)
mp[n]=modadd(mp[n] ,pw);
}
int main(){
fastio
lli t=1;
//cin>>t;
while(t--)
{
lli n;
cin>>n;
lli ans = 1;
loop(i,n)
{
lli x,y;
cin>>x>>y;
fun(x,y);
}
for(auto xt : mp)
{
lli sum=0;
lli terms = xt.S/2 + 1;
lli num = modsub(fastexpo(fastexpo(xt.F,2),terms) , 1);
lli deno = modsub(fastexpo(xt.F,2) , 1);
sum = modmul(num,fastexpo(deno,mod-2));
ans = modmul(ans,sum);
}
print(ans);
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGU8c3RkaW8uaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmFzdGlvIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiNkZWZpbmUgTUFYIDEwMDA1MAoKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIGxsaSBsb25nIGxvbmcgaW50CgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIElORiAxMDAwMDAwMDAwMDAwMDAKI2RlZmluZSBtb2QgMTAwMDAwMDAwNwoKLy8gdHJpZ25vbWV0cmljIGZ1bmN0aW9uIGFsd2F5cyBnaXZlIHZhbHVlIGluIFJhZGlhbnMgb25seQojZGVmaW5lIFBJIGFjb3MoLTEpIC8vMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI4CiNkZWZpbmUgZHNpbihkZWdyZWUpIHNpbihkZWdyZWUqKFBJLzE4MC4wKSkKI2RlZmluZSBkY29zKGRlZ3JlZSkgY29zKGRlZ3JlZSooUEkvMTgwLjApKQojZGVmaW5lIGR0YW4oZGVncmVlKSB0YW4oZGVncmVlKihQSS8xODAuMCkpCgojZGVmaW5lIHJzaW4ocmFkaWFuKSBzaW4ocmFkaWFuKQojZGVmaW5lIHJjb3MocmFkaWFuKSBjb3MocmFkaWFuKQojZGVmaW5lIHJ0YW4ocmFkaWFuKSB0YW4ocmFkaWFuKQoKI2RlZmluZSBjb3VudHRyYWlsaW5nemVyb2VzKG4pIF9fYnVpbHRpbl9jdHpsbChuKQojZGVmaW5lIGNvdW50c2V0Yml0cyhuKSBfX2J1aWx0aW5fcG9wY291bnRsbChuKSAKCiNkZWZpbmUgbWVtMChhKSBtZW1zZXQoYSwwLHNpemVvZihhKSkKI2RlZmluZSBtZW0xKGEpIG1lbXNldChhLC0xLHNpemVvZihhKSkKI2RlZmluZSBtZW1mKGEpIG1lbXNldChhLGZhbHNlLHNpemVvZihhKSkKCiNkZWZpbmUgbG9vcChpLG4pICBmb3IgKGxsaSBpID0gMDsgaSA8IG47IGkrKykKI2RlZmluZSBGT1IoaSxhLGIpIGZvciAobGxpIGkgPSBhOyBpIDwgYjsgaSsrKQoKI2RlZmluZSBhbGwodikgdi5iZWdpbigpLHYuZW5kKCkKI2RlZmluZSByYWxsKHYpIHYucmJlZ2luKCksdi5yZW5kKCkKI2RlZmluZSBtYWtldW5pcSh2KSB2LnJlc2l6ZSh1bmlxdWUoYWxsKHYpKSAtIHYuYmVnaW4oKSk7IC8vb25seSB1bmlxIGVsZW1lbnQgaW4gdmVjdG9yIGFmdGVyIHRoaXMKI2RlZmluZSBzeih4KSBpbnQoeC5zaXplKCkpCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCgojZGVmaW5lIG1paSBtYXA8bGxpLGxsaT4KCiNkZWZpbmUgcGlpIHBhaXI8bGxpLGxsaT4KCiNkZWZpbmUgdmkgdmVjdG9yPGxsaT4KI2RlZmluZSB2dmkgdmVjdG9yPHZpPgojZGVmaW5lIHZwaSB2ZWN0b3I8cGlpPgojZGVmaW5lIHZib29sIHZlY3Rvcjxib29sPgoKI2RlZmluZSBzZXRpIHNldDxsbGk+CgojZGVmaW5lIGdjZChhLGIpIF9fZ2NkKChhKSwoYikpCiNkZWZpbmUgbGNtKGEsYikgKGEvZ2NkKGEsYikpKmIKI2RlZmluZSBhYnMoeCkgKCh4IDwgMCk/LSh4KTp4KQojZGVmaW5lIGlzdm93ZWwodikgKDB4MjA4MjIyPj4odiYweDFmKSkmMQoKI2RlZmluZSBlbmRsICdcbicKCnRlbXBsYXRlIDx0eXBlbmFtZSBIZWFkPgp2b2lkIHByaW50KEhlYWQmJiBoZWFkKQp7CiAgICBjb3V0PDxoZWFkPDxlbmRsOwp9CnRlbXBsYXRlIDx0eXBlbmFtZSBIZWFkLCB0eXBlbmFtZS4uLiBUYWlsPgp2b2lkIHByaW50KEhlYWQmJiBoZWFkLCBUYWlsLi4uIHRhaWwpCnsKICAgIGNvdXQ8PGhlYWQ8PCIgIjsKICAgIHByaW50KHRhaWwuLi4pOwp9CgojZGVmaW5lIHNjYW5hcnIoYSxuKSBmb3IobGxpIGk9MDtpPG47aSsrKSAgICBjaW4+PmFbaV07CiNkZWZpbmUgc2NhbnZlYyhhLG4pIGZvcihsbGkgaT0wO2k8bjtpKyspeyBsbGkgeCA7IGNpbj4+eDsgYS5wYih4KTt9CgojZGVmaW5lIHByaW50YXJyKGEsbikgZm9yKGxsaSBpPTA7aTxuO2krKykgICBjb3V0PDxhW2ldPDwiICI7IGNvdXQ8PGVuZGw7CiNkZWZpbmUgcHJpbnR2ZWModmVjKSBmb3IoYXV0byB4dCA6IHZlYykgY291dDw8eHQ8PCIgIjsgICAgY291dDw8IlxuIjsKCiNkZWZpbmUgRkQoTikgZml4ZWQ8PHNldHByZWNpc2lvbihOKQoKI2RlZmluZSBkZWIoeCkgY291dDw8I3g8PCIgIjw8eDw8ZW5kbDsKCi8qCjFEIHZlY3RvciAtICB2aSBkcChuLHZhbHVlKTsKKi8KCmxsaSBtY2VpbChsbGkgYSxsbGkgYil7IHJldHVybihhL2IgKyAoYSViICE9IDApKTsgfQoKbGxpIG1mbG9vcihsbGkgYSxsbGkgYil7IHJldHVybihhL2IpOyB9CgpsbCBtb2RtdWwobGwgYSwgbGwgYixsbCBNT0QgPSBtb2QpIHsKICAgIHJldHVybiAoKGElTU9EKSAqIChiJU1PRCkpICUgTU9EOwp9CgpsbCBtb2RhZGQobGwgYSwgbGwgYixsbCBNT0QgPSBtb2QpewogICAgcmV0dXJuKChhJU1PRCkrKGIlTU9EKStNT0QpJU1PRDsKfQoKbGwgbW9kc3ViKGxsIGEsIGxsIGIsbGwgTU9EID0gbW9kKXsKICAgIHJldHVybigoYSVNT0QpIC0gKGIlTU9EKSArIE1PRCklTU9EOwp9CgpsbGkgZmFzdGV4cG8obGxpIGEsbGxpIGIgLGxsaSBNT0QgPSBtb2QpewogICAgYSA9IGElTU9EOwogICAgbGxpIGFucz0xOwogICAgd2hpbGUoYil7CiAgICAgICAgaWYoYiYxKQogICAgICAgICAgICBhbnM9KGFucyoxbGwqYSklTU9EOwogICAgICAgIGE9KGEqMWxsKmEpJU1PRDsKICAgICAgICBiPWIvMjsKICAgICAgICB9CiAgICByZXR1cm4gYW5zOwogfQoKCnZlY3RvcjxpbnQ+YWxsX2RpdlsyMDAwMDFdOwp2b2lkIGFsbGRpdmlzb3JzKCl7CmZvcihpbnQgaT0xO2k8PTIwMDAwMDsrK2kpewogICAgICAgIGZvcihpbnQgaj1pO2o8PTIwMDAwMDtqKz1pKQogICAgICAgICAgICBhbGxfZGl2W2pdLnBiKGkpOwogICAgfQp9CgoKYm9vbCBpc3Bvd2VyMihsbGkgbil7CiAgICByZXR1cm4obiBhbmQgKG4mKG4tMSkpPT0wICk7Cn0KCm1paSBtcDsKdm9pZCBmdW4obGxpIG4sbGxpIHB3KQp7CiAgICBsbGkgY250PTA7CiAgICB3aGlsZShuJTI9PTApCiAgICB7CiAgICAgICAgY250Kys7CiAgICAgICAgbi89MjsKICAgIH0KICAgIGlmKGNudCkKICAgICAgICBtcFsyXT1tb2RhZGQobXBbMl0gLCBjbnQqcHcpOwogICAgZm9yKGxsaSBpPTM7aSppPD1uO2krKykKICAgIHsKICAgICAgICBjbnQ9MDsKICAgICAgICB3aGlsZShuJWk9PTApCiAgICAgICAgewogICAgICAgICAgICBjbnQrKzsKICAgICAgICAgICAgbi89aTsKICAgICAgICB9CiAgICAgICAgaWYoY250KQogICAgICAgICAgICBtcFtpXT1tb2RhZGQobXBbaV0gLCBjbnQqcHcpOwogICAgfQogICAgaWYobj4xKQogICAgICAgIG1wW25dPW1vZGFkZChtcFtuXSAscHcpOwp9CgppbnQgbWFpbigpewpmYXN0aW8KbGxpIHQ9MTsKLy9jaW4+PnQ7CndoaWxlKHQtLSkKewogICBsbGkgbjsKICAgY2luPj5uOwogICBsbGkgYW5zID0gMTsKICAgbG9vcChpLG4pCiAgIHsKICAgICAgIGxsaSB4LHk7CiAgICAgICBjaW4+Png+Pnk7CgogICAgICAgZnVuKHgseSk7CiAgICAgICAKICAgfQoKICAgZm9yKGF1dG8geHQgOiBtcCkKICAgewogICAgICAgbGxpIHN1bT0wOwogICAgICAgbGxpIHRlcm1zID0geHQuUy8yICsgMTsKICAgICAgIGxsaSBudW0gPSBtb2RzdWIoZmFzdGV4cG8oZmFzdGV4cG8oeHQuRiwyKSx0ZXJtcykgLCAxKTsKICAgICAgIGxsaSBkZW5vID0gbW9kc3ViKGZhc3RleHBvKHh0LkYsMikgLCAxKTsKICAgICAgIHN1bSA9IG1vZG11bChudW0sZmFzdGV4cG8oZGVubyxtb2QtMikpOwogICAgICAgIGFucyA9IG1vZG11bChhbnMsc3VtKTsKICAgfQoKICAgCiAgIHByaW50KGFucyk7Cn0KCnJldHVybiAwOwp9Cgo=