#include <iostream>
#include <cstdio>
#include <tr1/unordered_map>
using namespace std;
const int mod=10;
int n;
int arr[15][5];
int cnt[5];
bool ext[10];
bool ok[5];
int ans,res,p;
tr1::unordered_map<int,int> mp;
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++){
for (int j=0;j<5;j++)
{scanf("%d",&arr[i][j]);}
}
ans=5;
for (int k=0;k<5;k++) {
for (int kk=0;kk<10;kk++) ext[kk]=0;
ok[k]=1;
ext[arr[1][k]]=1;
cnt[k]=1;
for (int i=2;i<=n;i++){
if (!ext[arr[i][k]]) {
cnt[k]++;
ok[k]=false;
ext[arr[i][k]]=1;
}
}
if (!ok[k]) p=k,ans--;
}
if (ans==5) {
res+=81;
}
else if (ans==3||ans==4){
if (ans==3) {
for (int i=0;i<=99;i++ ) mp[i]=0;
for (int i=1;i<=n;i++){
int hs=-1,hss=0;
for (int j=0;j<5;j++){
if (cnt[j]!=1) {
if (hs!=-1) hss=arr[i][j];
else hs=arr[i][j];
}
}
int mo=(hs-hss+mod)%mod;
for (int j=0;j<=99;j++){
if ((j%mod==hss&&j/10!=hs)||(j/10!=hs&&j%mod!=hss&&((j/10-j%mod)+mod)%mod==mo)||(j/10==hs&&j%mod!=hss)) mp[j]++;
}
}
for (int i=0;i<=99;i++ ) if (mp[i]==n) res++;
}
else {
if (p!=0) {
for (int i=0;i<=99;i++ ) mp[i]=0;
for (int i=1;i<=n;i++){
int hs=arr[i][p-1],hss=arr[i][p];
int mo=(hs-hss+mod)%mod;
for (int j=0;j<=99;j++){
if ((j%mod==hss&&j/10!=hs)||(j/10!=hs&&j%mod!=hss&&((j/10-j%mod)+mod)%mod==mo)||(j/10==hs&&j%mod!=hss)) mp[j]++;
}
}
for (int i=0;i<=99;i++ ) if (mp[i]==n) res++;
}
if (p!=4) {
for (int i=0;i<=99;i++ ) mp[i]=0;
for (int i=1;i<=n;i++){
int hs=arr[i][p],hss=arr[i][p+1];
int mo=(hs-hss+mod)%mod;
for (int j=0;j<=99;j++){
if ((j%mod==hss&&j/10!=hs)||(j/10!=hs&&j%mod!=hss&&((j/10-j%mod)+mod)%mod==mo)||(j/10==hs&&j%mod!=hss)) mp[j]++;
}
}
for (int i=0;i<=99;i++ ) if (mp[i]==n) res++;
}
}
}
else if (ans<3) {
printf("%d\n",res);exit(0);
}
printf("%d\n",res);
return 0;
}