#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; }