f2c14acc8924ed7e78956a73355cf092140ebde2cd53c82b7802f6f3a4ae5ca6
// 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;
}