#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int n,p[5555],a[5555],jc[5555],used[5555],sze[5555],szv[5555],pa[5555],cnt,cr,ans;
int dp[5555][5555];
int root(int x)
{
	if (pa[x]!=x) pa[x]=root(pa[x]);
	return pa[x];
}
void Union(int x,int y)
{
	int rx=root(x),ry=root(y);
	if (rx==ry)
	{
		sze[rx]++;
		return;
	}
	szv[ry]+=szv[rx];sze[ry]+=(sze[rx]+1);
	pa[rx]=ry;
}
int binpow(int a,int t)
{
	int res=1,p=a;
	for (int i=t;i;i>>=1)
	{
		if (i&1) res=1ll*res*p%mod;
		p=1ll*p*p%mod;
	}
	return res;
}
int main()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++) 
	{
		scanf("%d",&p[i]);
	}
	for (int i=1;i<=n;i++)
	{
		pa[i]=i;
		sze[i]=0;szv[i]=1;
	}
	for (int i=1;i<=n;i++)
	{
		if (p[i]!=-1) Union(i,p[i]);
		else ++cr;
	}
	for (int i=1;i<=n;i++)
	{
		if (root(i)==i && sze[i]==szv[i]-1) 
		{
			a[++cnt]=szv[i];
		}
		else if (root(i)==i)
		{
			ans=(binpow(n-1,cr)+ans)%mod;
		}
	}
	dp[0][0]=1;
	for (int i=0;i<cnt;i++)
	{
		for (int j=0;j<=i;j++)
		{
			dp[i+1][j]=(dp[i+1][j]+dp[i][j])%mod;
			dp[i+1][j+1]=(1ll*dp[i][j]*a[i+1]+dp[i+1][j+1])%mod;
		}
	}
	jc[0]=1;
	for (int i=1;i<=n;i++) jc[i]=1ll*jc[i-1]*i%mod;
	dp[cnt][1]=(dp[cnt][1]-cnt)%mod;
	for (int i=2;i<=cnt;i++) dp[cnt][i]=1ll*dp[cnt][i]*jc[i-1]%mod;
	for (int i=1;i<=cnt;i++)
	{
		ans=(1ll*dp[cnt][i]*binpow(n-1,cr-i)+ans)%mod;
	}
	ans=(1ll*binpow(n-1,cr)*n-ans)%mod;
	printf("%d\n",(ans+mod)%mod);
	return 0;
}