/**
 *	author:	 fractal
 *	timus: 	 288481RF
 *	created: 04/12/21 09:30
**/

#include <bits/stdc++.h>
using namespace std;

#define F first
#define S second 
#define mp make_pair
#define pb push_back
#define pf push_front
#define ppb pop_back
#define ppf pop_front
#define speed ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define sz(x) (int)x.size()
#define len(x) (int)strlen(x)
#define all(x) x.begin(), x.end()
#define debug cerr << "OK\n";
#define ub upper_bound
#define lb lower_bound 
#define nl printf("\n");
#define clbuff fflush(stdin);

mt19937 bruh(chrono::steady_clock::now().time_since_epoch().count());
mt19937_64 rofl(chrono::steady_clock::now().time_since_epoch().count());
 
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef set<int> si;
typedef set<ll> sll;
typedef set<pii> spii;
typedef set<pll> spll;
typedef multiset <int> msi;
typedef multiset <ll> msll;
typedef map <int, int> mi;
typedef map <ll, ll> mll;
 
const int N = 2e5 + 20;
const int M = 1e5;
const int mod = 1e9 + 7;
const int inf = 2e9 + 3;
const ll INF = 1e18;
const ld pi2 = 2.0 * 3.141592;
const ld pi = 3.141592;
const ld eps = 1e-12;

const int dx[4] = {1, -1, 0, 0};
const int dy[4] = {0, 0, -1, 1};

void files(string s = "main") {
	#ifndef PC
		freopen((s + ".in").c_str(), "r", stdin);
		freopen((s + ".out").c_str(), "w", stdout);
	#endif
}

int add(int a, int b) {
	if (a + b < 0) return a + b + mod;
	if (a + b >= mod) return a + b - mod;
	return a + b;		
}

int mul(int a, int b) {
	return a * 1LL * b % mod;
}

int binpow(int a, int n) {
	int ret = 1;
	while (n) {
		if (n & 1) ret = mul(ret, a);
		a = mul(a, a);
		n >>= 1;
	}
	return ret;
}

int n, a[N], A, B, C, fact[N], invf[N];

int Cnk(int n, int k) {
	return mul(fact[n], mul(invf[k], invf[n - k]));
}

int main() {
	speed;
	cin >> n;
	fact[0] = 1;
	for (int i = 1; i <= n; ++i)
		fact[i] = mul(fact[i - 1], i);
	invf[n] = binpow(fact[n], mod - 2);
	ll s = 0;
	for (int i = n; i >= 1; --i)
		invf[i - 1] = mul(invf[i], i);
	for (int i = 1; i <= n; ++i) {
		cin >> a[i];
		s += a[i];
	}
	if (s % n) {
		cout << 0 << '\n';
		return 0;
	}
	s /= n;
	sort(a + 1, a + n + 1);
	for (int i = 1; i <= n; ++i) {
		if (a[i] == s)
			C++;
		if (a[i] > s)
			A++;
		if (a[i] < s)
			B++;
	}
	int ans = 1;
	for (int i = 1, cnt = 0; i <= n; ++i) {
		if (a[i - 1] == a[i])
			cnt++;
		if (a[i - 1] != a[i] || i == n) {
			ans = mul(ans, invf[cnt]), cnt = 1;
		}
	}
	if (A == 1 || B == 1) {
		cout << mul(fact[n], ans) << '\n';
		return 0;
	}
	if (A && B) ans = mul(ans, 2);
	cout << mul(mul(mul(fact[A], fact[B]), mul(fact[C], ans)), Cnk(n, C)) << '\n';
}
