#include <iostream>
using namespace std;
const int MAX_INT = 1000000;
const int M = 4;
int graph[M][M];
void floyd(int g[M][M],int D[M][M])
{
for(int k = 0;k<M;k++) {
for(int i = 0;i<M;i++) {
for(int j = 0;j<M;j++) {
if(k == 0) {
D[i][j] =g[i][j];
} else {
D[i][j] = D[i][j] < (D[i][k]+D[k][j]) ? D[i][j] : (D[i][k]+D[k][j]);
}
}
}
}
}
void printgraph(int g[M][M],int v)
{
for(int i = 0;i<v;i++) {
for (int j = 0;j<v;j++) {
if(g[i][j] == MAX_INT) {
cout <<"*" << " ";
} else {
cout <<g[i][j ]<< " ";
}
}
cout << endl;
}
cout << endl;
}
int main()
{
int g[M][M]={{0,1,MAX_INT,MAX_INT},{MAX_INT,0,2,MAX_INT},{MAX_INT,MAX_INT,0,3},{4,MAX_INT,MAX_INT,0}};
printgraph(g,M);
floyd(g,graph);
printgraph(graph,M);
return 0;
}