#include <bits/stdc++.h>
using namespace std;
int vis1[2010];
int vis2[2010];
int mod = 1000000007;
long long dp[2010][2010];
int a[2010], b[2010], cnt;
int vis[2010];
void upd(long long &n, long long k) {
  n += k;
  if (n >= mod) n %= mod;
}
int main() {
  int n, i, j, k;
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> j;
    if (j >= 0)
      vis[j] = 1;
    else
      a[++cnt] = i;
  }
  cnt = 0;
  for (j = 1; j <= n; j++)
    if (!vis[j]) b[++cnt] = j;
  sort(a + 1, a + 1 + cnt);
  sort(b + 1, b + 1 + cnt);
  dp[0][0] = 1;
  long long tmp;
  for (i = 0; i < cnt; i++) {
    for (j = 0; j <= i; j++)
      if (tmp = dp[i][j]) {
        k = vis1[b[i + 1]] + vis2[a[i + 1]];
        if (b[i + 1] - a[i + 1]) {
          if (j) upd(dp[i + 1][j - 1], tmp * j);
          upd(dp[i + 1][j], tmp * (i - j - k) + tmp);
          upd(dp[i + 1][j + 1], tmp * k);
        } else {
          upd(dp[i + 1][j + 1], tmp);
          if (j) upd(dp[i + 1][j - 1], tmp * j);
          upd(dp[i + 1][j], tmp * (i - j));
        }
      }
    vis1[a[i + 1]] = 1, vis2[b[i + 1]] = 1;
  }
  j = dp[cnt][0];
  printf("%d\n", j);
}
