#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define fast ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
typedef long long ll;
typedef pair<int, int> PII;
const int N = 3010, INF = 0x3f3f3f3f;
const double euler = 0.5772156649015328606065120;
const int mod = 1e9 + 7;
ll c[N][N], a[N];
void init() {
for (int i = 0; i < N; i++)
for (int j = 0; j <= i; j++)
if (!j) c[i][j] = 1;
else c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
}
void solve() {
ll n, ans = 1;
cin >> n;
map<int, int> mp;
vector<int> v;
for (int i = 1; i <= n; i++) {
cin >> a[i];
mp[a[i]]++;
}
for (auto i : mp) {
if (i.second > n) {
cout << 0 << '\n';
return;
}
}
sort(a + 1, a + 1 + n);
for (int i = 1; i <= n; i++) {
ans = (ans * c[a[i] - i + 1][1]) % mod;
}
ans = (ans % mod + mod) % mod;
cout << ans << '\n';
}
int main()
{
fast;
init();
int t = 1;
while (t--) {
solve();
}
return 0;
}