//四个点一起搜
//标记四个状态 用八维数组标记
//每搜一个状态需要标记24种状态
#include<stdio.h>
#include<string.h>
int map[10][10];
int ans[10][10];
char dist[8][8][8][8][8][8][8][8];
int dir[4][2]={1,0, 0,1, -1,0, 0,-1};
int f;
int ok(int x,int y)
{
if(x<0||x>=8)return 0;
if(y<0||y>=8)return 0;
if(map[x][y]==1)return 0;
return 1;
}
void mark(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int m)
{
dist[x1][y1][x2][y2][x3][y3][x4][y4]=m;
dist[x1][y1][x2][y2][x4][y4][x3][y3]=m;
dist[x1][y1][x3][y3][x2][y2][x4][y4]=m;
dist[x1][y1][x3][y3][x4][y4][x2][y2]=m;
dist[x1][y1][x4][y4][x2][y2][x3][y3]=m;
dist[x1][y1][x4][y4][x3][y3][x2][y2]=m;
dist[x2][y2][x1][y1][x3][y3][x4][y4]=m;
dist[x2][y2][x1][y1][x4][y4][x3][y3]=m;
dist[x2][y2][x3][y3][x1][y1][x4][y4]=m;
dist[x2][y2][x3][y3][x4][y4][x1][y1]=m;
dist[x2][y2][x4][y4][x1][y1][x3][y3]=m;
dist[x2][y2][x4][y4][x3][y3][x1][y1]=m;
dist[x3][y3][x1][y1][x2][y2][x4][y4]=m;
dist[x3][y3][x1][y1][x4][y4][x2][y2]=m;
dist[x3][y3][x2][y2][x1][y1][x4][y4]=m;
dist[x3][y3][x2][y2][x4][y4][x1][y1]=m;
dist[x3][y3][x4][y4][x1][y1][x2][y2]=m;
dist[x3][y3][x4][y4][x2][y2][x1][y1]=m;
dist[x4][y4][x1][y1][x2][y2][x3][y3]=m;
dist[x4][y4][x1][y1][x3][y3][x2][y2]=m;
dist[x4][y4][x2][y2][x1][y1][x3][y3]=m;
dist[x4][y4][x2][y2][x3][y3][x1][y1]=m;
dist[x4][y4][x3][y3][x1][y1][x2][y2]=m;
dist[x4][y4][x3][y3][x2][y2][x1][y1]=m;
}
void dfs(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int step)
{
if(f)return;
if(ans[x1][y1]&&ans[x2][y2]&&ans[x3][y3]&&ans[x4][y4])
{
printf("YES\n");
f=1;
return ;
}
if(dist[x1][y1][x2][y2][x3][y3][x4][y4]<=step&&dist[x1][y1][x2][y2][x3][y3][x4][y4]!=-1)return ;//当前状态被标记过并且之前标记该状态时的步数比现在少那么当前状态就不用再搜了
mark(x1,y1,x2,y2,x3,y3,x4,y4,step);
int ax,ay,bx,by,cx,cy,dx,dy,i;
bx=x2;
by=y2;
cx=x3;
cy=y3;
dx=x4;
dy=y4;
for(i=0;i<4;i++)//对四个点分别四个方向的搜
{
ax=x1+dir[i][0];
ay=y1+dir[i][1];
if(map[ax][ay])
{
ax=ax+dir[i][0];
ay=ay+dir[i][1];
}
if(!ok(ax,ay))continue;
map[ax][ay]=1;
map[x1][y1]=0;
if(step!=8)
dfs(ax,ay,bx,by,cx,cy,dx,dy,step+1);
map[ax][ay]=0;
map[x1][y1]=1;
}
ax=x1;
ay=y1;
cx=x3;
cy=y3;
dx=x4;
dy=y4;
for(i=0;i<4;i++)
{
bx=x2+dir[i][0];
by=y2+dir[i][1];
if(map[bx][by])
{
bx=bx+dir[i][0];
by=by+dir[i][1];
}
if(!ok(bx,by))continue;
map[bx][by]=1;
map[x2][y2]=0;
if(step!=8)
dfs(ax,ay,bx,by,cx,cy,dx,dy,step+1);
map[bx][by]=0;
map[x2][y2]=1;
}
bx=x2;
by=y2;
ax=x1;
ay=y1;
dx=x4;
dy=y4;
for(i=0;i<4;i++)
{
cx=x3+dir[i][0];
cy=y3+dir[i][1];
if(map[cx][cy])
{
cx=cx+dir[i][0];
cy=cy+dir[i][1];
}
if(!ok(cx,cy))continue;
map[cx][cy]=1;
map[x3][y3]=0;
if(step!=8)
dfs(ax,ay,bx,by,cx,cy,dx,dy,step+1);
map[cx][cy]=0;
map[x3][y3]=1;
}
bx=x2;
by=y2;
cx=x3;
cy=y3;
ax=x1;
ay=y1;
for(i=0;i<4;i++)
{
dx=x4+dir[i][0];
dy=y4+dir[i][1];
if(map[dx][dy])
{
dx=dx+dir[i][0];
dy=dy+dir[i][1];
}
if(!ok(dx,dy))continue;
map[dx][dy]=1;
map[x4][y4]=0;
if(step!=8)
dfs(ax,ay,bx,by,cx,cy,dx,dy,step+1);
map[dx][dy]=0;
map[x4][y4]=1;
}
}
int main()
{
int x1,x2,x3,x4,y1,y2,y3,y4;
int xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4;
while(scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)!=EOF)
{
x1--;
x2--;
x3--;
x4--;
y1--;
y2--;
y3--;
y4--;
f=0;
scanf("%d%d%d%d%d%d%d%d",&xx1,&yy1,&xx2,&yy2,&xx3,&yy3,&xx4,&yy4);
xx1--;
xx2--;
xx3--;
xx4--;
yy1--;
yy2--;
yy3--;
yy4--;
memset(ans,0,sizeof(ans));
memset(map,0,sizeof(map));
memset(dist,-1,sizeof(dist));
map[x1][y1]=1;
map[x2][y2]=1;
map[x3][y3]=1;
map[x4][y4]=1;
ans[xx1][yy1]=1;
ans[xx2][yy2]=1;
ans[xx3][yy3]=1;
ans[xx4][yy4]=1;
dfs(x1,y1,x2,y2,x3,y3,x4,y4,0);
if(!f)printf("NO\n");
}
return 0;
}
//标记四个状态 用八维数组标记
//每搜一个状态需要标记24种状态
#include<stdio.h>
#include<string.h>
int map[10][10];
int ans[10][10];
char dist[8][8][8][8][8][8][8][8];
int dir[4][2]={1,0, 0,1, -1,0, 0,-1};
int f;
int ok(int x,int y)
{
if(x<0||x>=8)return 0;
if(y<0||y>=8)return 0;
if(map[x][y]==1)return 0;
return 1;
}
void mark(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int m)
{
dist[x1][y1][x2][y2][x3][y3][x4][y4]=m;
dist[x1][y1][x2][y2][x4][y4][x3][y3]=m;
dist[x1][y1][x3][y3][x2][y2][x4][y4]=m;
dist[x1][y1][x3][y3][x4][y4][x2][y2]=m;
dist[x1][y1][x4][y4][x2][y2][x3][y3]=m;
dist[x1][y1][x4][y4][x3][y3][x2][y2]=m;
dist[x2][y2][x1][y1][x3][y3][x4][y4]=m;
dist[x2][y2][x1][y1][x4][y4][x3][y3]=m;
dist[x2][y2][x3][y3][x1][y1][x4][y4]=m;
dist[x2][y2][x3][y3][x4][y4][x1][y1]=m;
dist[x2][y2][x4][y4][x1][y1][x3][y3]=m;
dist[x2][y2][x4][y4][x3][y3][x1][y1]=m;
dist[x3][y3][x1][y1][x2][y2][x4][y4]=m;
dist[x3][y3][x1][y1][x4][y4][x2][y2]=m;
dist[x3][y3][x2][y2][x1][y1][x4][y4]=m;
dist[x3][y3][x2][y2][x4][y4][x1][y1]=m;
dist[x3][y3][x4][y4][x1][y1][x2][y2]=m;
dist[x3][y3][x4][y4][x2][y2][x1][y1]=m;
dist[x4][y4][x1][y1][x2][y2][x3][y3]=m;
dist[x4][y4][x1][y1][x3][y3][x2][y2]=m;
dist[x4][y4][x2][y2][x1][y1][x3][y3]=m;
dist[x4][y4][x2][y2][x3][y3][x1][y1]=m;
dist[x4][y4][x3][y3][x1][y1][x2][y2]=m;
dist[x4][y4][x3][y3][x2][y2][x1][y1]=m;
}
void dfs(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int step)
{
if(f)return;
if(ans[x1][y1]&&ans[x2][y2]&&ans[x3][y3]&&ans[x4][y4])
{
printf("YES\n");
f=1;
return ;
}
if(dist[x1][y1][x2][y2][x3][y3][x4][y4]<=step&&dist[x1][y1][x2][y2][x3][y3][x4][y4]!=-1)return ;//当前状态被标记过并且之前标记该状态时的步数比现在少那么当前状态就不用再搜了
mark(x1,y1,x2,y2,x3,y3,x4,y4,step);
int ax,ay,bx,by,cx,cy,dx,dy,i;
bx=x2;
by=y2;
cx=x3;
cy=y3;
dx=x4;
dy=y4;
for(i=0;i<4;i++)//对四个点分别四个方向的搜
{
ax=x1+dir[i][0];
ay=y1+dir[i][1];
if(map[ax][ay])
{
ax=ax+dir[i][0];
ay=ay+dir[i][1];
}
if(!ok(ax,ay))continue;
map[ax][ay]=1;
map[x1][y1]=0;
if(step!=8)
dfs(ax,ay,bx,by,cx,cy,dx,dy,step+1);
map[ax][ay]=0;
map[x1][y1]=1;
}
ax=x1;
ay=y1;
cx=x3;
cy=y3;
dx=x4;
dy=y4;
for(i=0;i<4;i++)
{
bx=x2+dir[i][0];
by=y2+dir[i][1];
if(map[bx][by])
{
bx=bx+dir[i][0];
by=by+dir[i][1];
}
if(!ok(bx,by))continue;
map[bx][by]=1;
map[x2][y2]=0;
if(step!=8)
dfs(ax,ay,bx,by,cx,cy,dx,dy,step+1);
map[bx][by]=0;
map[x2][y2]=1;
}
bx=x2;
by=y2;
ax=x1;
ay=y1;
dx=x4;
dy=y4;
for(i=0;i<4;i++)
{
cx=x3+dir[i][0];
cy=y3+dir[i][1];
if(map[cx][cy])
{
cx=cx+dir[i][0];
cy=cy+dir[i][1];
}
if(!ok(cx,cy))continue;
map[cx][cy]=1;
map[x3][y3]=0;
if(step!=8)
dfs(ax,ay,bx,by,cx,cy,dx,dy,step+1);
map[cx][cy]=0;
map[x3][y3]=1;
}
bx=x2;
by=y2;
cx=x3;
cy=y3;
ax=x1;
ay=y1;
for(i=0;i<4;i++)
{
dx=x4+dir[i][0];
dy=y4+dir[i][1];
if(map[dx][dy])
{
dx=dx+dir[i][0];
dy=dy+dir[i][1];
}
if(!ok(dx,dy))continue;
map[dx][dy]=1;
map[x4][y4]=0;
if(step!=8)
dfs(ax,ay,bx,by,cx,cy,dx,dy,step+1);
map[dx][dy]=0;
map[x4][y4]=1;
}
}
int main()
{
int x1,x2,x3,x4,y1,y2,y3,y4;
int xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4;
while(scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)!=EOF)
{
x1--;
x2--;
x3--;
x4--;
y1--;
y2--;
y3--;
y4--;
f=0;
scanf("%d%d%d%d%d%d%d%d",&xx1,&yy1,&xx2,&yy2,&xx3,&yy3,&xx4,&yy4);
xx1--;
xx2--;
xx3--;
xx4--;
yy1--;
yy2--;
yy3--;
yy4--;
memset(ans,0,sizeof(ans));
memset(map,0,sizeof(map));
memset(dist,-1,sizeof(dist));
map[x1][y1]=1;
map[x2][y2]=1;
map[x3][y3]=1;
map[x4][y4]=1;
ans[xx1][yy1]=1;
ans[xx2][yy2]=1;
ans[xx3][yy3]=1;
ans[xx4][yy4]=1;
dfs(x1,y1,x2,y2,x3,y3,x4,y4,0);
if(!f)printf("NO\n");
}
return 0;
}