#include<iostream>
#include<stdio.h>
#include<map>
#include<queue>
using namespace std;
map<int,int>m;
queue<int>q;
int ini[6];/*数组(是一维整型按题中要求转化的桥梁(u→v))(这个地方有点可读性的失误,这个数组不仅拿来当初始数组,
还用来作中间的变量数组,但对程序运行无影响)*/
int in;//数组的整型形式
int answer[100]={0},cnt=0;//存放答案的:值为1则YES,为2则NO
void bfs();//广搜
void init();//初始化
int achange(int);
int bchange(int);
void ini1(int);//一维整型到数组
int ini2();//数组到一维整型
void clear();//清空队列!!!
void output();
int main()
{
int temp;
int i;
while(scanf("%d",&ini[0])!=EOF)//以EOF为结束标志
{
in=ini[0];
for(i=1;i<=5;i++)
{
cin>>ini[i];
in=in*10+ini[i];
}
init();
bfs();
m.clear();
clear();
}
output();
return(0);
}
void bfs()
{
int u,v;
int i;
int flag=0;
while(!q.empty())
{
u=q.front();
q.pop();
for(i=0;i<=1;i++)
{
if(i==0)
{
v=achange(u);
}
else
{
v=bchange(u);
}
if(v==123456) //判目标
{
answer[cnt]=1;
cnt++;
flag=1;
break;
}
else //判价值
{
if(m.count(v)==0)
{
q.push(v);
m[v]=1;
}
}
}
if(flag==1)//退出双重循环
{
break;
}
}
if(flag==0)
{
answer[cnt]==0;
cnt++;
}
}
void init()
{
q.push(in);
m[in]=1;
}
int achange(int u)
{
ini1(u);
int temp1,temp2,temp3,temp4;
temp1=ini[0];
temp2=ini[1];
temp3=ini[4];
temp4=ini[3];
ini[1]=temp1;
ini[4]=temp2;
ini[3]=temp3;
ini[0]=temp4;
int v;
v=ini2();
return(v);
}
int bchange(int u)
{
ini1(u);
int temp1,temp2,temp3,temp4;
temp1=ini[1];
temp2=ini[2];
temp3=ini[5];
temp4=ini[4];
ini[2]=temp1;
ini[5]=temp2;
ini[4]=temp3;
ini[1]=temp4;
int v;
v=ini2();
return(v);
}
void ini1(int k)
{
int i;
for(i=5;i>=0;i--)
{
ini[i]=k%10;
k=k/10;
}
}
int ini2()
{
int k=0;
int i;
for(i=0;i<=5;i++)
{
k=ini[i]+k*10;
}
return(k);
}
void clear()
{
while(!q.empty())
{
q.pop();
}
}
void output()
{
int i;
for(i=0;i<cnt;i++)
{
if(answer[i]==1)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
}