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>
using namespace std;
vector<vector<int>> x;

int get_val(vector<int> &a,int index){
    if(index==0) return x[0][a[index]];
    return x[get_val(a,index-1)][a[index]];
}
int check(vector<int> &e){return get_val(e,4);}

int main(){
    x.resize(10);
    for(int i=0;i<10;i++){
        x[i].resize(10);
        for(int j=0;j<10;j++){
            cin>>x[i][j];
        }
    }
    int res=0;
    for(int i=0;i<10000;i++){
        vector<int> a(5);
        int ival=i;
        bool pos=true;
        for(int j=0;j<4;j++){
            a[j]=ival%10;
            ival/=10;
        }
        a[4]=get_val(a,3);
        vector<int> e=a;
        for(int error=0;error<5;error++){
            for(int j=0;j<10;j++){
                if(a[error]==j){
                    continue;
                }
                e[error]=j;
                pos=pos&&(check(e)!=0);
                e[error]=a[error];
            }
        }
        for(int j=0;j<4;j++){
            if(e[j]!=e[j+1]){
                swap(e[j],e[j+1]);
                pos=pos&&(check(e)!=0);
                swap(e[j],e[j+1]);   
            }
        }
        res+=(!pos);
    }
    cout<<res<<endl;
    return 0;
}