#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
long long n;
long long x, y;
long long a[100009];
long long s[100009];
long long k[100009];
long long p[100009];
long long fact[10009];
long long pow(long long X, long long Y) {
  if (Y == 1) {
    return X;
  }
  if (Y % 2 == 0) {
    return pow((X * X) % mod, Y / 2) % mod;
  } else {
    return (pow((X * X) % mod, Y / 2) % mod * X) % mod;
  }
}
long long c(long long X, long long Y) {
  return ((fact[Y] * pow(fact[X], mod - 2)) % mod * pow(fact[Y - X], mod - 2)) %
         mod;
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  fact[0] = 1;
  for (int i = 1; i < 3000; i++) {
    fact[i] = fact[i - 1] * i;
    fact[i] %= mod;
  }
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    s[a[i]] = 1;
    if (a[i] != -1) {
      k[i + 1] = 1;
    } else {
      x++;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (s[i] + k[i] == 0) {
      y++;
    }
  }
  long long ans = 0;
  for (int i = 0; i <= y; i++) {
    ans += pow(-1, i) * c(i, y) * fact[x - i];
    ans %= mod;
  }
  ans += mod;
  ans %= mod;
  cout << ans << endl;
}
