#include<bits/stdc++.h>
#include<queue>
#include<map>
#include<cstdio>
using namespace std;
const int N=1<<24;
int nx[50][50],choice[N],fa[N],ans[N],g[N];
int cnt,s,si,ni,button,Start;
map<int, int> rec[2];
queue< pair<int,bool> > q;
void print()
{
cout<<1;
int state=0;
while(Start!=state)
{
ans[++cnt]=choice[state];
state=fa[state];
}
cout<<cnt<<endl;
for(int i=cnt;i;i--)
cout<<ans[i]<<' ';
exit(0);
}
void check(int x,pair<int,bool> h)
{
if(rec[h.second^1].count(x)==true)
{
print();
}
else
{
rec[h.second][x]=rec[h.second][h.first]+1;
q.push(make_pair(x,h.second));
}
return ;
}
int main()
{
for(int i=0;i<12;i++)
{
cin>>button;
Start|=(button-1)<<(i*2);
for(int j=0;j<4;j++)
{
cin>>nx[i][j];
nx[i][j]-=1;
}
}
q.push(make_pair(Start,0));
q.push(make_pair(0,1));
while(!q.empty())
{
pair<int,bool> h=q.front();
s=h.first;
q.pop();
for(int i=0;i<12;i++)
{
if(!h.second)
{
si=s>>i*2&3;
s^=(((si+1)&3)<<(i*2));
si=nx[i][si];
s^=((((s>>si*2)+1)&3)<<(si*2));
}
else
{
si=s>>i*2&3;
s^=((si==0?3:si-1)<<(i*2));
si=nx[i][si==0?3:si-1];
s^=(((s>>si*2&3==0?3:(s>>si*2)-1)&3)<<(si*2));
}
if(!g[s])
{
g[s]=g[h.first]+1;
if(h.second) fa[h.first]=s,choice[s]=i+1;
else fa[s]=h.first,choice[h.first]=i+1;
check(s,h);
}
}
}
return 0;
}