#include <bits/stdc++.h>
#define clr(x) memset(x,0,sizeof (x))
#define For(i,a,b) for (int i=(a);i<=(b);i++)
#define Fod(i,b,a) for (int i=(b);i>=(a);i--)
#define fi first
#define se second
#define kill _z_kill
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define outval(x) cerr<<#x" = "<<x<<endl
#define outv(x) cerr<<#x" = "<<x<<"  "
#define outtag(x) cerr<<"--------------"#x"---------------"<<endl
#define outarr(a,L,R) cerr<<#a"["<<L<<".."<<R<<"] = ";\
	For(_x,L,R) cerr<<a[_x]<<" ";cerr<<endl;
#define User_Time ((double)clock()/CLOCKS_PER_SEC)
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef unsigned uint;
typedef long double LD;
typedef vector <int> vi;
typedef pair <int,int> pii;
LL read(){
	LL x=0,f=0;
	char ch=getchar();
	while (!isdigit(ch))
		f=ch=='-',ch=getchar();
	while (isdigit(ch))
		x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return f?-x:x;
}
const int mod=1e9+7;
int Pow(int x,int y){
	int ans=1;
	for (;y;y>>=1,x=(LL)x*x%mod)
		if (y&1)
			ans=(LL)ans*x%mod;
	return ans;
}
void Add(int &x,int y){
	if ((x+=y)>=mod)
		x-=mod;
}
void Del(int &x,int y){
	if ((x-=y)<0)
		x+=mod;
}
int Add(int x){
	return x>=mod?x-mod:x;
}
int Del(int x){
	return x<0?x+mod:x;
}
const int N=5005;
int n,k=0,inv;
int a[N],fa[N];
int getf(int x){
	return fa[x]==x?x:fa[x]=getf(fa[x]);
}
int sz[N],tp[N];
int Fac[N],Inv[N];
int v[N],m=0;
int dp[N][N];
int main(){
	n=read(),inv=Pow(n-1,mod-2);
	For(i,1,n)
		fa[i]=i;
	For(i,1,n){
		a[i]=read();
		k+=a[i]==-1;
		if (a[i]!=-1)
			fa[getf(i)]=getf(a[i]);
	}
	For(i,1,n){
		int f=getf(i);
//		outval(f);
		sz[f]++;
		tp[f]+=a[i]==-1;
	}
//	outarr(tp,1,n);outarr(sz,1,n);
	Fac[0]=1;
	For(i,1,n)
		Fac[i]=(LL)Fac[i-1]*i%mod;
	Inv[n]=Pow(Fac[n],mod-2);
	Fod(i,n,1)
		Inv[i-1]=(LL)Inv[i]*i%mod;
	int ans=0,cnt=0;
	For(i,1,n)
		if (getf(i)==i){
			assert(tp[i]<=1);
			if (tp[i]==1)
				v[++m]=sz[i];
			else
				cnt++;
		}
//	outarr(v,1,m);
	assert(k==m);
	dp[0][0]=1;
	For(i,1,m)
		For(j,0,i){
			int val=dp[i-1][j];
			if (!val)
				continue;
			Add(dp[i][j],val);
			Add(dp[i][j+1],(LL)val*inv%mod*v[i]%mod);
		}
	For(i,2,m)
		Add(ans,(LL)dp[m][i]*Fac[i-1]%mod);
	For(i,1,m)
		Add(ans,(LL)(v[i]-1)*inv%mod);
	ans=(LL)ans*Pow(n-1,k)%mod;
	ans=Add((LL)cnt*Pow(n-1,k)%mod+ans);
	ans=Del((LL)n*Pow(n-1,k)%mod-ans);
	cout<<ans<<endl;
	return 0;
}