#include <bits/stdc++.h>
using namespace std;
#define mod 998244353
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3fll
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
const int maxn=5050;
int fa[maxn],sz[maxn];
int n,lft,k;
int p[maxn],pw[maxn],fac[maxn];
inline int getfa(int x){return x==fa[x]?x:fa[x]=getfa(fa[x]);}
inline void Union(int x,int y)
{
	x=getfa(x),y=getfa(y);
	if(x==y)return;
	sz[x]+=sz[y];
	fa[y]=x;
	lft--;
}
inline void add(int &a,int b)
{
	a+=b;
	if(a>=MOD)a-=MOD;
}
vector<int> td;
int dp[2][maxn];
int main()
{
	scanf("%d",&n);
	lft=n;
	for(int i=1;i<=n;i++)
	{
		fa[i]=i;
		sz[i]=1;
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&p[i]);
		if(p[i]>0)
		{
			Union(i,p[i]);
		}
		else
		{
			k++;
			td.push_back(i);
		}
	}
	pw[0]=1;
	fac[0]=1;
	for(int i=1;i<=n;i++)
	{
		pw[i]=pw[i-1]*1ll*(n-1)%MOD;
		fac[i]=fac[i-1]*1ll*i%MOD;
	}
	int p=0,q=1;
	dp[p][0]=1;
	int mns=(lft-k)*1ll*pw[k]%MOD;
	for(int i=0;i<k;i++)
	{
		int cur=sz[getfa(td[i])];
		add(mns,(cur-1)*1ll*pw[k-1]%MOD);
		memset(dp[q],0,sizeof(dp[q]));
		for(int j=0;j<=k;j++)
		{
			add(dp[q][j],dp[p][j]);
			add(dp[q][j+1],dp[p][j]*1ll*cur%MOD);
			if(1<=j&&j<=k-1)
			{
				add(mns,dp[p][j]*1ll*cur%MOD*1ll*fac[j]%MOD*1ll*pw[k-j-1]%MOD);
			}
		}
		swap(p,q);
	}
	int ans=n*1ll*pw[k]%MOD;
	add(ans,(MOD-mns)%MOD);
	printf("%d\n",ans);
	return 0;
}