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 x[10][10];

char get(string &T)
{
  int now = 0;
  for(int i = 0; i < T.size(); i++) {
    now = x[now][T[i] - '0'];
  }
  return (now + '0');
}


int main()
{
  for(int i = 0; i < 10; i++) {
    for(int j = 0; j < 10; j++) {
      cin >> x[i][j];
    }
  }
  int ret = 0;
  for(int i = 0; i < 10000; i++) {
    string K = to_string(i);
    while(K.size() < 4) K = "0" + K;
    K += get(K);
    bool flag = true;
    for(int j = 0; j < K.size(); j++) {
      for(char k = '0'; k <= '9'; k++) {
        if(K[j] == k) continue;
        swap(K[j], k);
        flag &= get(K) != '0';
        swap(K[j], k);
      }
      if(j > 0 && K[j - 1] != K[j]) {
        swap(K[j - 1], K[j]);
        flag &= get(K) != '0';
        swap(K[j - 1], K[j]);
      }
    }
    ret += 1 ^ flag;
  }
  cout << ret << endl;
}