//https://blog.csdn.net/ryo_218/article/details/79640235
#include <iostream>
#include <string>
using namespace std;
int num=0;int visit[7][7];
int direct[4][2]={1,0,0,-1,-1,0,0,1};
void dfs(int x,int y)
{
int i,dx,dy;
if(x==0 || x==6 || y==0 || y==6)//该点在边界上
{ num++;return ;}
for(i=0;i<4;i++)
{
dx=x+direct[i][0];dy=y+direct[i][1];//注意此处dx,dy不能为x,y;不然下一方向就是依据更改过的(x,y)点
if(dx>-1 && dx<7 && dy>-1 && dy<7 && !visit[dx][dy])
{ visit[dx][dy]=1;visit[6-dx][6-dy]=1;
dfs(dx,dy);
visit[dx][dy]=0;visit[6-dx][6-dy]=0;
}
}
}
void main()
{
memset(visit,0,sizeof(visit));
visit[3][3]=1;
dfs(3,3);
cout<<(num+4)/8<<endl;//上下左右,另外还有对称,两个对角线没有左右对称故需要加4
}