#include<cstdio>
#include<algorithm>
using namespace std;
const INF=1000000000;
cons int MAXV=200;
int n,m;
int dis[MAXV][MAXV];
struct node{
bool flag;
int dp[100001];
}node[100001];
void F(){
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
if(dis[i][k]!=INF&&dis[k][j]!=INF&&dis[i][k]+dis[k][j]<dis[i][j]){
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
int main (){
int n,m,k;
int u,v,w;
int temp1,sum=0;
fill(dis[0],dis[0]+MAXV*MAXV,INF);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
dis[i][i]=0;
for(int i=0;i<m;i++){
scanf("%d%d%d",&u,&v,&w);
dis[u][v]=w;
dis[v][u]=w;
}
F();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
node[i].dp[i]=dis[i][j];
}
}
for(int i=1;i<=n;i++){
int k=0;
vector<int>vi;
for(int j=1;j<=n;j++){
if(node[j]==1){
vi.insert(node[i].dp[j]);
}
sum+=node[i].dp[j];
sort(node.dp.begin(),dp)
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d".dis[i][j]);
}
printf("\n");
}
return 0;
}#include<cstdio>
#include<algorithm>
using namespace std;
const INF=1000000000;
cons int MAXV=200;
int n,m;
int dis[MAXV][MAXV];
struct node{
bool flag;
int dp[100001];
}node[100001];
void F(){
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
if(dis[i][k]!=INF&&dis[k][j]!=INF&&dis[i][k]+dis[k][j]<dis[i][j]){
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
int main (){
int n,m,k;
int u,v,w;
int temp1,sum=0;
fill(dis[0],dis[0]+MAXV*MAXV,INF);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
dis[i][i]=0;
for(int i=0;i<m;i++){
scanf("%d%d%d",&u,&v,&w);
dis[u][v]=w;
dis[v][u]=w;
}
F();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
node[i].dp[i]=dis[i][j];
}
}
for(int i=1;i<=n;i++){
int k=0;
vector<int>vi;
for(int j=1;j<=n;j++){
if(node[j]==1){
vi.insert(node[i].dp[j]);
}
sum+=node[i].dp[j];
sort(node.dp.begin(),dp)
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d".dis[i][j]);
}
printf("\n");
}
return 0;
}