One day Mr. Takahashi picked up a dictionary containing all of the N! permutations of integers 1 through N. The dictionary has N! pages, and page i (1 ≤ i ≤ N!) contains the i-th permutation in the lexicographical order.

Mr. Takahashi wanted to look up a certain permutation of length N in this dictionary, but he forgot some part of it.

His memory of the permutation is described by a sequence P_1, P_2, ..., P_N. If P_i = 0, it means that he forgot the i-th element of the permutation; otherwise, it means that he remembered the i-th element of the permutation and it is P_i.

He decided to look up all the possible permutations in the dictionary. Compute the sum of the page numbers of the pages he has to check, modulo 10^9 + 7.

Constraints

* 1 ≤ N ≤ 500000
* 0 ≤ P_i ≤ N
* P_i ≠ P_j if i ≠ j (1 ≤ i, j ≤ N), P_i ≠ 0 and P_j ≠ 0.

Input

The input is given from Standard Input in the following format:


N
P_1 P_2 ... P_N


Output

Print the sum of the page numbers of the pages he has to check, as modulo 10^9 + 7.

Examples

Input

4
0 2 3 0


Output

23


Input

3
0 0 0


Output

21


Input

5
1 2 3 5 4


Output

2


Input

1
0


Output

1


Input

10
0 3 0 0 1 0 4 0 0 0


Output

953330050
#include <iostream>
#include <vector>
#define llint long long
#define mod 1000000007

using namespace std;

struct BIT{
	int size;
	vector<int> bit;
	BIT(){size = 0;}
	BIT(int s){
		size = s;
		bit.resize(size+1);
		init();
	}
	void init(){
		for(int i = 1; i <= size; i++) bit[i] = 0;
	}
	int query(int i){
		int ret = 0;
		while(i > 0){
			ret += bit[i];
			i -= i&(-i);
		}
		return ret;
	}
	void add(int i, int x){
		while(i <= size){
			bit[i] += x;
			i += i&(-i);
		}
	}
};

llint n;
llint p[500005];
llint u[500005];
bool used[500005];
llint lcnt[500005], rcnt[500005];
BIT bit(500005);
llint qcnt;

llint fact[500005], fact_inv[500005];

llint modpow(llint a, llint n)
{
	if(n == 0) return 1;
	if(n % 2){
		return ((a%mod) * (modpow(a, n-1)%mod)) % mod;
	}
	else{
		return modpow((a*a)%mod, n/2) % mod;
	}
}

void make_fact()
{
	llint val = 1;
	fact[0] = 1;
	for(int i = 1; i < 500005; i++){
		val *= i;
		val %= mod;
		fact[i] = val;
	}
	for(int i = 0; i < 500005; i++){
		fact_inv[i] = modpow(fact[i], mod-2);
	}
}

llint comb(llint n, llint k)
{
	llint ret = 1;
	ret *= fact[n];
	ret *= fact_inv[k], ret %= mod;
	ret *= fact_inv[n-k], ret %= mod;
	return ret;
}

int main(void)
{
	make_fact();
	
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> p[i];
	
	for(int i = 1; i <= n; i++){
		if(p[i] != 0) used[p[i]] = true;
		else qcnt++;
	}
	
	for(int i = 1; i <= n; i++){
		lcnt[i] = lcnt[i-1];
		if(!used[i]) lcnt[i]++;
	}
	for(int i = n; i >= 1; i--){
		rcnt[i] = rcnt[i+1];
		if(!used[i]) rcnt[i]++;
	}
	llint fsum = 0;
	for(int i = 1; i <= n; i++) if(!used[i]) fsum += i-1, fsum %= mod;
	
	llint q = 0, rsum = 0;
	for(int i = 1; i <= n; i++){
		if(p[i] == 0){
			if(qcnt >= 2){
				u[i] += q * comb(qcnt, 2) % mod * fact[qcnt-2] % mod;
				u[i] %= mod;
			}
			u[i] += rsum * fact[qcnt-1] % mod, u[i] %= mod;
			q++;
		}else{
			u[i] += bit.query(p[i]) * fact[qcnt] % mod, u[i] %= mod;
			if(qcnt >= 1) u[i] += q * lcnt[p[i]] % mod * fact[qcnt-1] % mod, u[i] %= mod;
			bit.add(p[i], 1);
			rsum += rcnt[p[i]], rsum %= mod;
		}
	}
	
	for(int i = 1; i <= n; i++){
		llint tmp;
		if(p[i] != 0) tmp = fact[qcnt] * (p[i]-1) % mod;
		else tmp = fsum * fact[qcnt-1] % mod;
		tmp += mod - u[i], tmp %= mod;
		u[i] = tmp;
	}
	
	llint ans = 0;
	for(int i = 1; i <= n; i++){
		ans += fact[n-i] * u[i] % mod, ans %= mod;
	}
	ans += fact[qcnt], ans %= mod;
	cout << ans << endl;
	
	return 0;
}