#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; const ll MOD=1e9+7; ll powmod(ll a, ll k){ ll ap=a, ans=1; while(k){ if(k&1){ ans*=ap; ans%=MOD; } ap=ap*ap; ap%=MOD; k>>=1; } return ans; } ll inv(ll a){ return powmod(a, MOD-2); } typedef complex C; const double PI=acos(-1.0); vector tmp; size_t sz; vector fft(vector a, bool inv=false){ size_t mask=sz-1; size_t p=0; for(size_t i=sz>>1; i>0; i>>=1){ auto& cur=((p&1) ? tmp : a); auto& nex=((p&1) ? a : tmp); C e=polar(1.0, 2*PI*i*(inv ? -1.0 : 1.0)/sz); C w=1; for(size_t j=0; j convolute(vector a, vector b){ size_t m=a.size()+b.size()-1; sz=1; while(sz A(sz), B(sz); for(size_t i=0; i ans(m); for(size_t i=0; i0; } int main() { int n; cin>>n; int a[100010]; vector c(100001); for(int i=0; i>a[i]; c[a[i]]++; } ll s=1; ll p=0; for(int i=n-1; i>=0; i--){ (s*=powmod(a[i], p))%=MOD; p+=a[i]; } vector v=convolute(c, c); for(int i=0; i=0; i--){ q[i]=P(a[i], mn); mn=min(mn, a[i]); } P p0=*min_element(q, q+n-1, comp); ll m=(p0.first+p0.second)*powmod(p0.first, p0.second)%MOD; (s*=inv(m))%=MOD; cout<