e537b6d57529330e0098265bee416f3d60313b33373268a1896a08aa7d512707
// https://szkopul.edu.pl/problemset/problem/GMBfzRQAdw3b7wfvC9Xf7YE4/site/?key=statement
// OIG V (2 etap)
// Monety
#include <algorithm>
#include <array>
#include <iostream>
#include <map>
#include <vector>
constexpr int mod = 1000 * 1000 * 1000 + 7;
constexpr int sizik = 1000 * 1000 + 17;
std::array<int, sizik> arr;
int main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int n;
std::cin >> n;
for (int i = 0; i < n; i++) {
int a;
std::cin >> a;
arr[0]++;
arr[a]--;
}
for (int i = 1; i < n; i++) {
arr[i] = arr[i - 1] + arr[i];
if (arr[i] <= 0) {
std::cout << "0\n";
return 0;
}
}
long long ans = 1;
for (int i = 0; i < n; i++) {
ans *= arr[i] - n + 1 + i;
ans %= mod;
}
std::cout << (ans % mod) << '\n';
return 0;
}