OIG V - mon

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