#include #include #include using namespace std; int readPosIntLn(){ int x=0; int cnt=0; int fi=-1; bool is_neg=false; bool is_first=true; while(true){ char g=getchar(); if(g=='-'){ assert(is_first); is_neg=true; } else if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(!(cnt>10 || ( cnt==10 && fi>1) )); } else if(g=='\n'){ if(is_neg){ x*=-1; } return x; } else { assert(false); } is_first=false; } } long long readPosLongLn(){ long long x=0; int cnt=0; int fi=-1; while(true){ char g=getchar(); if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(!(cnt>20 || ( cnt==19 && fi>1) )); } else if(g=='\n'){ return x; } else { assert(false); } } } int readPosIntSpace(){ int x=0; int cnt=0; int fi=-1; bool is_neg=false; bool is_first=true; while(true){ char g=getchar(); if(g=='-'){ assert(is_first); is_neg=true; } else if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(!(cnt>10 || ( cnt==10 && fi>1) )); } else if(g==' '){ if(is_neg){ x*=-1; } return x; } else { assert(false); } is_first=false; } } long long readPosLongSpace(){ long long x=0; int cnt=0; int fi=-1; while(true){ char g=getchar(); if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(!(cnt>20 || ( cnt==19 && fi>1) )); } else if(g==' '){ return x; } else { assert(false); } } } string readStringLn(){ string ret=""; while(true){ char g=getchar(); assert(g!=-1); if(g=='\n'){ break; } ret+=g; } return ret; } int mod=1000000007; int T; int n; int arr[100100]; int main(){ //freopen("00.txt","r",stdin); //freopen("00o.txt","w",stdout); //cin>>T; T=readPosIntLn(); assert(1<=T && T<=10000); int sm=0; while(T--){ n=readPosIntLn(); assert(1<=n && n<=100000); //cin>>n; sm+=n; assert(1<=sm && sm<=100000); for(int i=0;i>arr[i]; if(i==n-1){ arr[i]=readPosIntLn(); } else { arr[i]=readPosIntSpace(); } assert(arr[i]==-1 || (1<= arr[i] && arr[i]<=n)); } long long ans=1; int cur=0; for(int i=n-1;i>=0;i--){ if(arr[i]!=-1){ if(cur==0){ cur=arr[i]; } if(cur==arr[i]){ cur--; } else { ans=0; break; } } else { if(cur==0){ if(i>0) ans *= 2; ans %= 1000000007; } else { cur--; } } } if(cur ==0){ cout<