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;

int ans=0;
int a[10][10];

int func(vector<int> &t){
  int res= a[ 0 ][ t[0] ];
  for(int i=1;i<(int)t.size();i++){
    res=a[ res ][ t[i] ];
  }
  return res;
}

int main(){
  for(int i=0;i<10;i++)
    for(int j=0;j<10;j++)
      cin>>a[i][j];

  map< vector<int> ,int > mp;
  for(int i=0;i<10000;i++){
    int p=i;
    vector<int> t(4);
    for(int j=0;j<4;j++){
      t[j]=p%10;
      p/=10;
    }
    reverse(t.begin(),t.end());
    t.push_back( func(t) );
    bool flg=false;
    int base=func(t);


    //    cout<<t[0]<<' '<<t[1]<<' '<<t[2]<<' '<<t[3]<<' '<<t[4]<<' '<<base<<endl;
      
    vector<int> u;
    for(int j=0;j<5;j++){
      for(int k=0;k<10;k++){
        u=t;
        if(u[j]==k)continue;
        u[j]=k;
        if( func(u) == 0 )flg=true;
      }
    }

    for(int j=0;j<4;j++){
      u=t;
      if(u[j]==u[j+1])continue;
      swap(u[j],u[j+1]);
      if( func(u) == 0 )flg=true;
    }
    if(flg)ans++;
  }

  cout<<ans<<endl;
  return 0;
}