#include<bits/stdc++.h>
using namespace std;

const int mod = 1e9 + 7;
int sz[5010],fac[5010],pre[5010];
vector<int> e[5010];
bool ok;
void dfs(int x,int p){
	sz[x]=1;
	for(int it:e[x]){
		if(it==p)	continue;
		if(sz[it]!=0){
			ok=false;
			continue;
		}
		dfs(it,x);
		sz[x]+=sz[it];
	}
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n;
	cin>>n;
	fac[0]=pre[0]=1;
	for(int i=1;i<=n;i++)
		fac[i]=1LL*fac[i-1]*i%mod,pre[i]=1LL*pre[i-1]*(n-1)%mod;
	int k=0;
	for(int i=1,p;i<=n;i++){
		cin>>p;
		if(p==-1)	k++;
		else	e[i].emplace_back(p),e[p].emplace_back(i);
	}
	vector<int> v;
	int ans=1LL*pre[k]*n%mod;
	for(int i=1;i<=n;i++)
		if(sz[i]==0){
			ok=true;
			dfs(i,0);
			if(ok)
				v.emplace_back(sz[i]);
			else
				ans=(ans-pre[k])%mod;
		}
	vector<int> f(1,1);
	for(int it:v){
		f.emplace_back(0);
		for(int i=f.size()-2;i>=0;i--)
			f[i+1]=(f[i+1]+1LL*f[i]*it)%mod;
	}
	for(int i=2;i<f.size();i++)
		ans=(ans-1LL*fac[i-1]*f[i]%mod*pre[k-i])%mod;
	if(f.size()>1)
		ans=(ans-1LL*(f[1]-k)*pre[k-1])%mod;
	cout<<(ans+mod)%mod<<endl;
}
