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 <bits/stdc++.h>
#define syosu(x) fixed<<setprecision(x)
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> P;
typedef pair<double,double> pdd;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<string> vs;
typedef vector<P> vp;
typedef vector<vp> vvp;
typedef vector<pll> vpll;
typedef pair<int,P> pip;
typedef vector<pip> vip;
const int inf=1<<30;
const ll INF=1ll<<60;
const double pi=acos(-1);
const double eps=1e-11;
const ll mod=1e9+7;
const int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};

const int n=10;
int a[n][n];

bool f(string s){
	int x=0;
	for(int i=0;i<5;i++) x=a[x][s[i]-'0'];
	return x==0;
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	while(1){
		for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j];
		int res=0;
		for(int i=0;i<10000;i++){
			auto s=to_string(i);
			while(s.size()<4) s='0'+s;
			int e=0;
			for(int j=0;j<4;j++) e=a[e][s[j]-'0'];
			s+=(char)(e+'0');
			bool B=1;
			for(int i=0;i<5&&B;i++) for(int j=0;j<10&&B;j++) if(s[i]-'0'!=j){
				auto t=s;
				t[i]=(char)('0'+j);
				if(f(t)) B=0;
			}
			for(int i=0;i<4;i++) if(s[i]!=s[i+1]){
				swap(s[i],s[i+1]);
				if(f(s)) B=0;
				swap(s[i],s[i+1]);
			}
			if(!B){
				res++;
			}
		}
		cout<<res<<endl;
		break;
	}
}