#include<bits/stdc++.h>
#define int long long
using namespace std;
int mod=1e9+7;
int m,a[200010],b[200010],s1[200010],s2[200010],cnt=0,ans=1;
map<int,int> mp;
int ksm(int x,int y)
{
int tmp=1;
while(y)
{
if(y&1)
{
tmp=tmp*x%mod;
}
x=x*x%mod;
y>>=1;
}
return tmp%mod;
}
signed main()
{
freopen("in.txt","r",stdin);
freopen("b.txt","w",stdout);
cin>>m;
for(int i=1;i<=m;i++)
{
int x;
cin>>x;
if(mp[x])
{
a[mp[x]]++;
}
else
{
mp[x]=++cnt;
a[mp[x]]=2;
b[mp[x]]=x;
}
}
s1[0]=1;s2[cnt+1]=1;
for(int i=1;i<=cnt;i++)
{
s1[i]=s1[i-1]*a[i]%(mod-1);
}
for(int i=cnt;i>=1;i--)
{
s2[i]=s2[i+1]*a[i]%(mod-1);
}
for(int i=1;i<=cnt;i++)
{
int tmp=(s1[i-1]*s2[i+1]%(mod-1)*(a[i]*(a[i]-1)/2))%(mod-1);
ans=ans*ksm(b[i],tmp)%mod;
}
cout<<ans%mod<<endl;
return 0;
}
大致思路为统计一个数在所有因数中的出现次数,求调,急急急急急