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<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;

int a[110][110];
int ans;

int judge(string s)
{
	int now=0;
	for(int i=0;i<5;i++)
		now=a[now][s[i]];
	return now;
}

int check(int x)
{
	//if(x==2016)
		//puts("fuck");
	int tt=0,x1=x;;
	string s="";
	for(int i=4;i>=1;i--)
	{
		s+=x%10;
		x/=10;
	}
	reverse(s.begin(),s.end());
	int now=0;
	for(int i=0;i<4;i++)
		now=a[now][s[i]];
	s+=now;
	string s1=s;
	for(int i=0;i<5;i++)
		for(int j=0;j<10;j++)
		{
			s1=s;
			if(j==s[i])
				continue;
			s1[i]=j;
			if(!judge(s1))
				return 1;
		}
	s1=s;
	for(int i=0;i<4;i++)
	{
		s1=s;
		if(s1[i]==s1[i+1])
			continue;
		swap(s1[i],s1[i+1]);
		if(!judge(s1))
			return 1;
	}
	return 0;
}

int main()
{
	for(int i=0;i<10;i++)
		for(int j=0;j<10;j++)
			cin>>a[i][j];
	for(int i=0;i<=9999;i++)
		ans+=check(i);
	cout<<ans<<endl;
	return 0;
}