#include<iostream>
#define NUM 5
using namespace std;
bool ok(int i,int b[],int a[NUM][NUM])
{
for(int j=0;j<i;j++)
if(a[i][j]==1&&b[i]==b[j])
return false;
return true;
}
void backtrackcoloring(int i,int vertexnum,int &sum,int a[NUM][NUM])
{
int n=vertexnum;
int *b=new int[n];
if(i>n)
sum++;
else
{
for(int j=0;j<4;j++)
{ b[i]=j;
if(ok(i,b,a))
backtrackcoloring(i+1,vertexnum,&sum,a);
}
}
}
int main()
{
int sum=0;
int m,n;
int a[NUM][NUM];
int linenum=8;
int vertexnum=5;
for(int i=0;i<NUM;i++)
for(int j=0;j<NUM;j++)
{
a[i][j]=0;
a[j][i]=0;
}
for(i=0;i<8;i++)
{
cin>>m>>n;
a[m][n]=1;
a[n][m]=1;
}
backtrackcoloring(0,vertexnum,&sum,a);
cout<<sum<<endl;
return 0;
}
#define NUM 5
using namespace std;
bool ok(int i,int b[],int a[NUM][NUM])
{
for(int j=0;j<i;j++)
if(a[i][j]==1&&b[i]==b[j])
return false;
return true;
}
void backtrackcoloring(int i,int vertexnum,int &sum,int a[NUM][NUM])
{
int n=vertexnum;
int *b=new int[n];
if(i>n)
sum++;
else
{
for(int j=0;j<4;j++)
{ b[i]=j;
if(ok(i,b,a))
backtrackcoloring(i+1,vertexnum,&sum,a);
}
}
}
int main()
{
int sum=0;
int m,n;
int a[NUM][NUM];
int linenum=8;
int vertexnum=5;
for(int i=0;i<NUM;i++)
for(int j=0;j<NUM;j++)
{
a[i][j]=0;
a[j][i]=0;
}
for(i=0;i<8;i++)
{
cin>>m>>n;
a[m][n]=1;
a[n][m]=1;
}
backtrackcoloring(0,vertexnum,&sum,a);
cout<<sum<<endl;
return 0;
}