#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template <class T>
void cprintv(vector<T>& v) {
  for (int i = 0; i < v.size(); i++) {
    cout << v[i] << " ";
  }
  cout << endl;
}
template <class T, class U>
void cprintd(unordered_map<T, U>& tp) {
  for (auto i = tp.begin(); i != tp.end(); i++) {
    cout << i->first << ": " << i->second << endl;
  }
}
template <class T = ll>
vector<T> clist(int n) {
  std::vector<T> v;
  while (n--) {
    T k;
    cin >> k;
    v.push_back(k);
  }
  return v;
}
vector<char> cstrtv(string& s) {
  vector<char> v;
  for (int i = 0; i < s.size(); i++) {
    v.push_back(s[i]);
  }
  return v;
}
template <class T>
unordered_map<T, int> ccount(vector<T>& v) {
  unordered_map<T, int> m;
  for (int i = 0; i < v.size(); i++) {
    m[v[i]] += 1;
  }
  return m;
}
template <class T>
ostream& operator<<(ostream& os, vector<T>& dt) {
  cprintv(dt);
  return os;
}
template <class T, class U>
ostream& operator<<(ostream& os, unordered_map<T, U>& dt) {
  cprintd(dt);
  return os;
}
template <class T, class U>
ostream& operator<<(ostream& os, pair<T, U>& dt) {
  cout << dt.first << " : " << dt.second << endl;
  return os;
}
const int maxint = 2147483646;
const int minint = -2147483646;
const long long maxlll = 9223372036854775805;
const long long minlll = -9223372036854775805;
template <class T>
int maxind(vector<T>& v) {
  int maxi = 0;
  for (int i = 1; i < v.size(); i++) {
    maxi = (v[maxi] < v[i]) ? i : maxi;
  }
  return maxi;
}
template <class T>
T maxel(vector<T>& v) {
  return v[maxind(v)];
}
template <class T>
int minind(vector<T>& v) {
  int mini = 0;
  for (int i = 1; i < v.size(); i++) {
    mini = (v[mini] > v[i]) ? i : mini;
  }
  return mini;
}
template <class T>
T minel(vector<T>& v) {
  return v[minind(v)];
}
template <class T>
vector<ll> partialsums(vector<T>& v) {
  vector<ll> ps(v.size());
  ps[0] = v[0];
  for (int i = 1; i < v.size(); i++) {
    ps[i] = ps[i - 1] + v[i];
  }
  return ps;
}
template <class T>
ll sumy(vector<T>& v) {
  ll s = 0;
  for (int i = 0; i < v.size(); i++) {
    s += v[i];
  }
  return s;
}
int mini(int x, int y, int su) {
  if (su == 0 && (x == 0 || y == 0)) {
    return 1;
  }
  if (su == 0) {
    return -1;
  }
  if (x == 0 && y == 0) {
    return -1;
  }
  if (x == 0) {
    if (!(su % y)) {
      return su / y;
    } else {
      return -1;
    }
  }
  int counter = 0;
  while (su % y) {
    su -= x;
    counter += 1;
    if (su < 0) {
      return -1;
    }
  }
  counter += su / y;
  return counter;
}
int main() {
  int v[10][10][10];
  int mat[10][10];
  for (int p = 0; p < 10; p++) {
    for (int q = p; q < 10; q++) {
      for (int f = 0; f < 10; f++) {
        v[p][q][f] = -1;
      }
    }
  }
  for (int i = 0; i < 10; i++) {
    for (int j = i; j < 10; j++) {
      for (int z = 0; z < 101; z++) {
        int o = mini(i, j, z);
        int nowie = mini(i, j, z);
        if ((v[i][j][z % 10] > nowie or (v[i][j][z % 10] == -1)) &&
            nowie != -1) {
          v[i][j][z % 10] = nowie;
        }
      }
    }
  }
  string s;
  vector<int> x;
  int m[10][10];
  int summy = 0;
  cin >> s;
  for (int i = 1; i < s.size(); i++) {
    x.push_back((10 + s[i] - s[i - 1]) % 10);
  }
  for (int i = 0; i < 10; i++) {
    for (int j = i; j < 10; j++) {
      bool ok = 0;
      int summy = 0;
      for (int l = 0; l < x.size(); l++) {
        int el = x[l];
        int q = v[i][j][el];
        if (q == -1) {
          ok = 1;
        }
        summy += q - 1;
      }
      if (ok == 1) {
        m[i][j] = -1;
        m[j][i] = -1;
      } else {
        m[i][j] = summy;
        m[j][i] = summy;
      }
    }
  }
  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
      cout << m[i][j] << " ";
    }
    cout << endl;
  }
}
