M = 1000000007
def mpow (n, p):
if p == 0:
return 1
ans = mpow(n, int(p/2))
ans = (ans * ans) % M
if p % 2 == 1:
ans = ans * n
return ans % M
n = int(input())
arr = input().split(' ')
m = [0] * 200001
for i in arr:
m[int(i)] = m[int(i)] + 1
d = 1
ans1 = 1
ans2 = 1
e = -1
for i in m:
e = e + 1
if i == 0:
continue
if i % 2 == 0:
ans1 = (ans1 * mpow(e, i/2)) % M
else:
ans2 = (ans2 * mpow(e, i)) % M
for i in m:
if i % 2 == 0:
ans1 = mpow(ans1, i + 1) % M
else:
ans2 = mpow(ans2, (i + 1)/2) % M
print ((ans1 * ans2) % M)
TSA9IDEwMDAwMDAwMDcKCmRlZiBtcG93IChuLCBwKToKCQoJaWYgcCA9PSAwOgoJCXJldHVybiAxCgkJCglhbnMgPSBtcG93KG4sIGludChwLzIpKQoJYW5zID0gKGFucyAqIGFucykgJSBNCgkKCWlmIHAgJSAyID09IDE6CgkJYW5zID0gYW5zICogbgoJCQoJcmV0dXJuIGFucyAlIE0KCQpuID0gaW50KGlucHV0KCkpCmFyciA9IGlucHV0KCkuc3BsaXQoJyAnKQoKbSA9IFswXSAqIDIwMDAwMQoKZm9yIGkgaW4gYXJyOgoJbVtpbnQoaSldID0gbVtpbnQoaSldICsgMQoKZCA9IDEKCmFuczEgPSAxCmFuczIgPSAxCmUgPSAtMQoKZm9yIGkgaW4gbToKCWUgPSBlICsgMQoJaWYgaSA9PSAwOgoJCWNvbnRpbnVlCglpZiBpICUgMiA9PSAwOgkKCQlhbnMxID0gKGFuczEgKiBtcG93KGUsIGkvMikpICUgTQoJZWxzZToKCQlhbnMyID0gKGFuczIgKiBtcG93KGUsIGkpKSAlIE0KCQkKZm9yIGkgaW4gbToKCWlmIGkgJSAyID09IDA6CgkJYW5zMSA9IG1wb3coYW5zMSwgaSArIDEpICUgTQoJZWxzZToKCQlhbnMyID0gbXBvdyhhbnMyLCAoaSArIDEpLzIpICUgTQoJCnByaW50ICgoYW5zMSAqIGFuczIpICUgTSk=