#include<bits/stdc++.h>
#define fo(i,a,b)for(int i=a,_e=b;i<=_e;++i)
#define fd(i,a,b)for(int i=b,_e=a;i>=_e;--i)
#define add(x,y)(x=((long long)y+x)%mo)
using namespace std;
const int N=305,mo=1e9+7;
int n,a,b,two,o,f[2][N][N],v,s,one[N*2],sw[N*2];
bool bz[N*2],can[N*2];
int main(){
	cin>>n;
	fo(i,1,n){
		cin>>a>>b;
		if(a==-1&&b==-1)++two;else
		if(a==-1)can[b]=1;else
		if(b==-1)can[a]=1;else
		bz[a]=bz[b]=1;
	}
	fo(i,1,n*2)one[i]=one[i-1]+can[i],sw[i]=sw[i-1]+(!can[i]&&!bz[i]);
	f[0][two][0]=1;
	fd(i,1,n*2)if(!bz[i]){
		o^=1;memset(f[o],0,sizeof f[o]);
		fo(j,0,two)fo(k,0,n)if(v=f[!o][j][k]){
			int l=k+sw[i]-2*j-one[i];
			if(can[i]){
				if(k)add(f[o][j][k-1],v);
				add(f[o][j][k],v);
			}else{
				if(k&&j)add(f[o][j-1][k-1],v*j);
				if(l)add(f[o][j][k],v*l);
				add(f[o][j][k+1],v);
			}
		}
	}
	cout<<f[o][0][0];
}