/*
三维状压dp 转移的时候分步即可
棋盘只需要放0~9个数字,所以最多只有111111111这样的的状态
输出别忘减一(减一才是111111111)
*/
#include<cstdio>
#include<cstring>
#define maxn 1500
using namespace std;
int g[12][12],f[12][12][maxn],ans;
int min(int x,int y){return x<y?x:y;}
int main()
{
for(int i=1;i<=10;i++)
for(int j=1;j<=10;j++)
scanf("%d",&g[i][j]);
memset(f,127/3,sizeof(f));
f[1][1][1<<g[1][1]]=g[1][1];
int mxx=1<<10,SS;
for(int i=1;i<=10;i++)
for(int j=1;j<=10;j++)
for(int S=0;S<mxx;S++){
SS=S|(1<<g[i+1][j]);
f[i+1][j][SS]=min(f[i+1][j][SS],f[i][j][S]+g[i+1][j]);
SS=S|(1<<g[i][j+1]);
f[i][j+1][SS]=min(f[i][j+1][SS],f[i][j][S]+g[i][j+1]);
}
printf("%d\n",f[10][10][mxx-1]);
return 0;
}