#include<bits/stdc++.h>
using namespace std;
const int N = 1000000007;
int main(){
long long n,q,k;
cin>>n>>q;
long long a[n+1][n+1],b[n+1][n+1],c[n+1][n+1];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
long long row[n+1],col[n+1],x,y,bb,cc,bbb,ccc,ans;
bool z[n+1],zz[n+1];
for(int i=1;i<=q;i++){
cin>>k;
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
memset(z,0,sizeof(z));
memset(zz,0,sizeof(zz));
for(int j=1;j<=k;j++){
cin>>row[j];
z[row[j]]=1;
}
for(int j=1;j<=k;j++){
cin>>col[j];
zz[col[j]]=1;
}
sort(row+1,row+k+1);
sort(col+1,col+k+1);
x=0;
for(int j=1;j<=n;j++){
if(!z[j])x++;
y=0;
for(int l=1;l<=n;l++){
if(!z[j]&&!zz[l]){
y++;
b[x][y]=a[j][l];
}
}
}
for(int j=1;j<=k;j++){
for(int l=1;l<=k;l++){
c[j][l]=a[row[j]][col[l]];
}
}
bb=cc=1;
for(int j=1;j<=x;j++)bb*=b[j][j];
for(int j=1;j<=k;j++)cc*=c[j][j];
bbb=bb;
ccc=cc;
bb=cc=1;
for(int j=1;j<=x;j++)bb*=b[j][x-j+1];
for(int j=1;j<=k;j++)cc*=c[j][k-j+1];
bbb-=bb;
ccc-=cc;
bbb = ((bbb % N) + N) % N;
ccc = ((ccc % N) + N) % N;
ans=bbb*ccc;
ans = ((ans % N) + N) % N;
cout<<ans<<endl;
}
return 0;
}
样例过了,其他全错