#include <bits/stdc++.h>

using namespace std;

#define mod 1000000007

int n;
vector<int> arr;
vector<int> pr;


long long int power(long long int x,long long int y,long long int p)
{
    long long int res = 1;      // Initialize result
 
    x = x % p;  // Update x if it is more than or 
                // equal to p
 
    while (y > 0)
    {
        // If y is odd, multiply x with result
        if (y & 1)
            res = (res*x) % p;
 
        // y must be even now
        y = y>>1; // y = y/2
        x = (x*x) % p;  
    }
    return res;
}
 

void sieve()
{
    bool prime[100011]={true};
    memset(prime,1,sizeof(prime));
    prime[1]=0;
    prime[2]=1;
    for(int i=2;i<=100001;i++)
    {
        if(prime[i])
        {
            for(int j=2*i;j<=100001;j+=i)
            {
                prime[j]=0;
            }
        }
    }

    for(int i=2;i<=100001;i++)
    {
        if(prime[i])
        {
            //cout<<i<<" ";
            pr.push_back(i);
        }
    }
}

int main() 
{
    cin>>n;

    arr.resize(n);

    sieve();

    for(int i=0;i<n;i++)
        cin>>arr[i];

    long long int ans=1;

    map<int,int> mp;

    for (int i = 0; i < (int)pr.size(); ++i)
    {
        mp.insert(pair<int,int>(i,0));
    }

    //cout<<pr.size()<<"\n";
    //for(int i=0;i<5;i++)
        //cout<<pr[i]<<" "<<mp[pr[i]]<<"\t";
    //mp[10]=1;
    //cout<<mp[10]<<" ";
    for(int i=0;i<n;i++)
    {
        long long int num = arr[i];
        int j=0;
        while(num > 1 && j < pr.size())
        {
            //cout<<num<<" "<<pr[j]<<" ";
            while(!(num%pr[j]))
            {
                num=num/pr[j];
                mp[pr[j]]++;
                //cout<<pr[j]<<" "<<mp[pr[j]]<<"\n";
            }
            j++;
        }
        if(num > 1)
        {
            mp[num]++;
        }
    }
    bool f=0;
    map<int,int>::iterator it = mp.begin();
    for(;it!=mp.end();it++)
    {
        //cout<<mp[pr[i]]<<" ";
        if((it->second%n))
        {
            f=1;
            break;
        }
    }

    if(!f)
    {
        cout<<"justdoit";
        return 0;
    }

    for(;it!=mp.end();it++)
    {
        ans = ans * power(it->first,(n+1-(it->second)%(n+1))%(n+1),mod);
        ans = ans%mod;
    }
    cout<<ans;
    return 0;
}