#include <bits/stdc++.h>

using namespace std;

const int N = 5005;
const int mod = 1e9+7;
int add(int a, int b) {
	return a + b >= mod ? a + b - mod : a + b;
}
int mul(int a, int b) {
	return int(1LL * a * b % mod);
}
int fexp(int b, int e = mod - 2) {
	int ans = 1;
	while(e) {
		if(e & 1) ans = mul(ans, b);
		b = mul(b, b);
		e /= 2;
	}
	return ans;
}

int n, p[N];
int k;
vector<int> g[N];
int vis[N];

int dfs(int u) {
	int sz = 1;
	vis[u] = 1;
	for(int v : g[u]) if(!vis[v]) {
		sz += dfs(v);
	}
	return sz;
}

int sz[N];

int dp[N];

int main() {
	scanf("%d", &n);

	for(int i = 1; i <= n; i++) scanf("%d", p + i);

	for(int i = 1; i <= n; i++) {
		if(p[i] != -1) {
			g[ p[i] ].push_back(i);
			g[i].push_back(p[i]);
		}
	}

	for(int i = 1; i <= n; i++) {
		if(p[i] == -1) {
			sz[k++] = dfs(i);
		}
	}

	int ans = mul(n, fexp(n - 1, k));

	for(int i = 1; i <= n; i++) if(!vis[i]) {
		int tmp = dfs(i);
		ans = add(ans, mod - fexp(n - 1, k));
	}

	dp[0] = 1;
	for(int i = 0; i < k; i++) {
		for(int j = i + 1; j > 0; j--) {
			dp[j] = add(dp[j], mul(sz[i], dp[j - 1]));
		}
	}

	int fat = 1;
	for(int i = 2; i <= k; i++) {
		fat = mul(fat, i - 1);
		ans = add(ans, mod - mul(mul(dp[i], fat), fexp(n - 1, k - i)));
	}
	for(int i = 0; i < k; i++) {
		ans = add(ans, mod - mul(sz[i] - 1, fexp(n - 1, k - 1)));
	}
	printf("%d\n", ans);
}
