#include #include #include #include #include #define MOD 1000000007 #define N 2010 using namespace std; int n,ans; int a[N],w[N]; int f[N][N]; int fac[N]; void init(){ fac[0]=1; int i,j; for (i=1;i<=n;i++) fac[i]=(1ll*fac[i-1]*i)%MOD; for (i=0;i<=n;i++) f[1][i]=n-i; for (i=1;i<=n;i++){ for (j=0;j=a[k]) ans=(1ll*ans+tp1)%MOD; return (1ll*tp1+tp)%MOD; } void work(){ int i,j,k; for (i=1;i<=n;i++){ if (a[i]>w[i]) ans=(1ll*ans+1ll*f[i][a[i]-1]*fac[n-i])%MOD; else ans=(1ll*ans+1ll*f[i][w[i]]*fac[n-i])%MOD; for (j=i+1;j<=n;j++){ k=f[i][w[i]]*f[i][a[j]-1]-min(f[i][w[i]],f[i][a[j]-1]); ans=(1ll*ans+1ll*k*fac[n-i-1])%MOD; } } } int main(){ int test; scanf("%d",&test); for (int cas=1;cas<=test;cas++){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&w[i]); for (int i=1;i<=n;i++) scanf("%d",&a[i]); ans=0; init(); work(); dfs(1); printf("Case #%d: %d\n",cas,ans); } return 0; }