http://codeforces.com/gym/101246/problem/E
#include<bits/stdc++.h>
using namespace std;
const int M=205;
int n,k,m=0;
int mp[M][M];
int turn[M];
int f[M];
int book[M][M];
void dfs(int r,int c){
if(book[r][c])
return;
book[r][c]=1;
if(c>k){
f[r]=1;
return;
}
for(int i=1;i<=n;i++){
if(i!=r&&mp[r][i]==turn[c]&&mp[r][i]!=0)
dfs(i,c+1);
}
}
int main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
while(cin>>n){
memset(book,0,sizeof(book));
m=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
int t;
scanf("%d",&t);
mp[i][j]=mp[j][i]=t;
}
// cin>>k;
scanf("%d",&k);
for(int i=1;i<=k;i++)
scanf("%d",&turn[i]);
// cin>>turn[i];
// memset(f,0,sizeof(f));
for(int i=0;i<M;i++)
f[i]=0;
dfs(1,1);
for(int i=1;i<=n;i++){
if(f[i]){
m++;
}
}
cout<<m<<endl;
if(m!=0){
int flag=1;
for(int i=1;i<=n;i++){
if(f[i]){
if(flag){
cout<<i;
flag=0;
}else
cout<<" "<<i;
}
}
}
}
return 0;
}