Problem: Example

Input

0 3 1 7 5 9 8 6 4 2
7 0 9 2 1 5 4 8 6 3
4 2 0 6 8 7 1 3 5 9
1 7 5 0 9 8 3 4 2 6
6 1 2 3 0 4 5 9 7 8
3 6 7 4 2 0 9 5 8 1
5 8 6 9 7 2 0 1 3 4
8 9 4 5 3 6 2 0 1 7
9 4 3 8 6 1 7 2 0 5
2 5 8 1 4 3 6 7 9 0


Output

0

Solution (in CPP):

Solution:
#include<stdio.h>
#include<iostream>
using namespace std;
int val[10][10];
int Value(int a,int b,int c,int d,int e)
{
	int f=val[0][a];
	f=val[f][b];
	f=val[f][c];
	f=val[f][d];
	if(e==-1)
	{
		return f;
	}
	else
		return val[f][e];
}
bool Check(int a,int b,int c,int d,int e)
{
	for(int j=0;j<=9;j++)
	{
		if(a!=j)
		{
			if(Value(j,b,c,d,e)==0)
			{
				return false; 
			}
		}
	} 
	for(int j=0;j<=9;j++)
	{
		if(b!=j)
		{
			if(Value(a,j,c,d,e)==0)
			{
			//	cout<<"sdf"<<endl;
				return false; 
			}
		}
	}
	for(int j=0;j<=9;j++)
	{
		if(c!=j)
		{
			if(Value(a,b,j,d,e)==0)
			{
			//	cout<<"sfd"<<endl;
				return false; 
			}
		}
	}  
	for(int j=0;j<=9;j++)
	{
		if(d!=j)
		{
			if(Value(a,b,c,j,e)==0)
			{
			//	cout<<"ad"<<endl;
				return false; 
			}
		}
	}
	for(int j=0;j<=9;j++)
	{
		if(e!=j)
		{
			if(Value(a,b,c,d,j)==0)
			{
				return false; 
			}
		}
	}
	if((Value(b,a,c,d,e)==0&&b!=a)||(Value(a,c,b,d,e)==0&&b!=c)||(Value(a,b,d,c,e)==0&&c!=d)||(Value(a,b,c,e,d)==0&&e!=d))
	{
		return false;
	}  
	else
	{
		return true;
	}
}
int main(void)
{
	for(int i=0;i<10;i++)
	{
		for(int j=0;j<10;j++)
		{
			scanf("%d",&val[i][j]);
		}
	}
	int a,b,c,d;
	int sum=0;
	for(int i=0;i<=9999;i++)
	{
		a=i%10;
		b=i/10%10;
		c=i/100%10;
		d=i/1000%10;
	//	cout<<Value(a,b,c,d,-1)<<endl;
	//	cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl; 
		int e=Value(a,b,c,d,-1);
	//	cout<<Check(a,b,c,d,e)<<endl;
		if(Check(a,b,c,d,e)==false)
		{
			sum++;
		}
	}
	cout<<sum<<endl;
}