#include<stdio.h>
#include<windows.h>

int count=0;
void input(int table[10][10]){
	int i,j;
	for(i=0;i<10;i++){
		for(j=0;j<10;j++){
			scanf("%d",&table[i][j]);
		}
	}
}

void output(int table[10][10]){
	int i,j;
	printf("output\n");
	for(i=0;i<10;i++){
		for(j=0;j<10;j++){
			printf("%d ",table[i][j]);
		}
		printf("\n");
	}
}

void separate(int num,int sep[]){
	sep[0]=num/1000;
	sep[1]=num/100%10;
	sep[2]=num/10%10;
	sep[3]=num%10;
	//printf("separate...%d %d %d %d\n",sep[0],sep[1],sep[2],sep[3]);
}

void make_checkdigit(int table[10][10],int sep[5]){
	int a,b,c,d;
	a=table[0][sep[0]];
	b=table[a][sep[1]];
	c=table[b][sep[2]];
	d=table[c][sep[3]];
	sep[4]=d;
	//printf("separate...%d %d %d %d\n",sep[0],sep[1],sep[2],sep[3]);
	//printf("make_checkdigit...%d\n",sep[4]);
}

int check_checkdigit(int table[10][10],int sep[5]){
	int a,b,c,d,e;
	a=table[0][sep[0]];
	b=table[a][sep[1]];
	c=table[b][sep[2]];
	d=table[c][sep[3]];
	e=table[d][sep[4]];
	//printf("checkdigit...%d %d %d %d\n",a,b,c,d);
	if(e==0) return 1;
	else return 0;
}

int check_humanerror_altering(int table[10][10],int sep[5],int err[5]){
	int i,j,c=1,d=1;
	for(i=0;i<5;i++){
		err[i]=sep[i];
	}
	for(i=0;i<5&c==1;i++){
		if(i>0) err[i-1]=sep[i-1];
		for(j=0;j<10&&c==1;j++){
			if(j==sep[i]){d=0;}
			if(d==1){
				err[i]=j;
				if(check_checkdigit(table,err)) c=0;
			}
			d=1;
		}
	}
	if(c==0){
		/*printf("failure_altering\n");
		printf("sep...%d%d%d%d%d\n",sep[0],sep[1],sep[2],sep[3],sep[4]);
		printf("err...%d%d%d%d%d\n",err[0],err[1],err[2],err[3],err[4]);
		Sleep(0.5*1000);*/
		return 0;
	}
	if(c==1){
		/*printf("success_altering\n");
		printf("sep...%d%d%d%d%d\n",sep[0],sep[1],sep[2],sep[3],sep[4]);
		printf("err...%d%d%d%d%d\n",err[0],err[1],err[2],err[3],err[4]);*/
		return 1;
	}
}

void transporting(int *a,int *b){
	int tmp;
	tmp=*a;
	*a=*b;
	*b=tmp;
}

int check_humanerror_transporting(int table[10][10],int sep[5],int err[5]){
	int i,c=1,d=1;;
	for(i=0;i<5;i++){
		err[i]=sep[i];
	}
	for(i=0;i<4&&c==1;i++){
		if(err[i]==err[i+1]) d=0;
		if(d==1){
			transporting(&err[i],&err[i+1]);
			if(check_checkdigit(table,err)) c=0;
			if(c==1) transporting(&err[i],&err[i+1]);
		}
		d=1;
	}
	if(c==0){
		/*printf("failure transporting\n");
		printf("sep...%d%d%d%d%d\n",sep[0],sep[1],sep[2],sep[3],sep[4]);
		printf("err...%d%d%d%d%d\n",err[0],err[1],err[2],err[3],err[4]);
		Sleep(0.5*1000);*/
		return 0;
	}
	if(c==1){
		/*printf("success_transporting\n");
		printf("sep...%d%d%d%d%d\n",sep[0],sep[1],sep[2],sep[3],sep[4]);
		printf("err...%d%d%d%d%d\n",err[0],err[1],err[2],err[3],err[4]);*/
		return 1;
	}
}

/*void count_cannotdetect(int table[10][10],int sep[5],int err[5]){
	if(check_humanerror_altering(table,sep,err)==0||check_humanerror_transporting(table,sep,err)==0) count++;
}*/

int main(void){
	int table[10][10];
	int num,sep[5],err[5];
	int alt,tra;
	input(table);
	for(num=0;num<10000;num++){
		separate(num,sep);
		make_checkdigit(table,sep);
		alt=check_humanerror_altering(table,sep,err);
		tra=check_humanerror_transporting(table,sep,err);
		if(alt*tra==1); //printf("sep...%d%d%d%d%d\n",sep[0],sep[1],sep[2],sep[3],sep[4]);
		if(alt*tra==0) count++;
	}
	/*if(check_checkdigit(table,sep)) printf("OK\n");
	else printf("NG\n");
	check_humanerror_altering(table,sep,err);
	check_humanerror_transporting(table,sep,err);
	output(table);*/
	printf("result...%d\n",count);
	return 0;
}
