#include <bits/stdc++.h>
using namespace std;
/*
这道题的难点在于怎样加x或者y才能使的a转化为b,并且加的x和y的和最少
这道题竟然用了floyd,转换成求最短路
这才深刻地体会到,我根本不会算法
*/
const int maxn=10;
const int INF=0x3f3f3f3f;
int dis[maxn][maxn];
int num[maxn][maxn];
const int len=2e6+10;
char s[len];
int length;
void work(int x,int y)
{
memset(dis,INF,sizeof dis);//如果INf=0x3f,不能直接memset INF,直接memset 0x3f////0x3f3f3f3f(INF)
for(int i=0; i<maxn; i++)
dis[i][(i+x)%10]=dis[i][(i+y)%10]=1;
for(int k=0; k<maxn; k++)
for(int i=0; i<maxn; i++)
for(int j=0; j<maxn; j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
for(int i=1; i<length; i++)
{
int a=s[i-1]-'0';
int b=s[i]-'0';
if(dis[a][b]==INF)
{
num[x][y]=-1;
return ;
}
num[x][y]+=(dis[a][b]-1);
}
}
int main()
{
scanf("%s",s);
length=strlen(s);
for(int i=0; i<maxn; i++)
for(int j=0; j<=i; j++)
{
work(i,j);
num[j][i]=num[i][j];
}
for(int i=0; i<maxn; i++)
{
for(int j=0; j<maxn-1; j++)
printf("%d ",num[i][j]);
printf("%d\n",num[i][9]);
}
return 0;
}