fork download
  1. M = 1000000007
  2.  
  3. def mpow (n, p):
  4.  
  5. if p == 0:
  6. return 1
  7.  
  8. ans = mpow(n, int(p/2))
  9. ans = (ans * ans) % M
  10.  
  11. if p % 2 == 1:
  12. ans = ans * n
  13.  
  14. return ans % M
  15.  
  16. n = int(input())
  17. arr = input().split(' ')
  18.  
  19. m = [0] * 200001
  20.  
  21. for i in arr:
  22. m[int(i)] = m[int(i)] + 1
  23.  
  24. d = 1
  25.  
  26. ans1 = 1
  27. ans2 = 1
  28. e = -1
  29.  
  30. for i in m:
  31. e = e + 1
  32. if i == 0:
  33. continue
  34. if i % 2 == 0:
  35. ans1 = (ans1 * mpow(e, i/2)) % M
  36. else:
  37. ans2 = (ans2 * mpow(e, i)) % M
  38.  
  39. for i in m:
  40. if i % 2 == 0:
  41. ans1 = mpow(ans1, i + 1) % M
  42. else:
  43. ans2 = mpow(ans2, (i + 1)/2) % M
  44.  
  45. print ((ans1 * ans2) % M)
Success #stdin #stdout 0.17s 27712KB
stdin
3
2 3 2
stdout
24