#include<bits/stdc++.h>
using namespace std;
#define maxint 9999
int main()
{
int n,m;
int a[100][100];
int c[100][100];
cin >> n >> m;
for(int i = 1;i <= n;i ++)
{
for(int j = 1;j <= n;j ++)
{
c[i][j] = maxint;
}
}//在定义C的时候使C[I][J] = maxint 会出错
for(int i = 1;i <= m;i ++)
{
for(int j = 1;j <= 3;j++)
{
cin >> a[i][j];
}
int w,q;
w = a[i][1];
q = a[i][2];
c[w][q] = a[i][3];
c[q][w] = c[w][q];
}
for(int i = 1;i <= n;i ++)
{
for(int j = 1;j <= n;j++)
{
cout << c[i][j] << ' ';
}
cout << endl;
}
int lowcost[n] ;
int closest[n] ;
bool s[maxint];
s[1] = true;
for(int i = 2;i <= n;i ++)
{
lowcost[i] = c[1][i];
closest[i] = 1;
s[i] = false;
}
for(int i = 1;i < n;i ++)
{
int min = 100000;
int j = 1;
for(int k =2;k <= n;k ++)
{
if((lowcost[k]<min)&&(!s[k]))
{
min = lowcost[k];
j = k;
}
s[j] = true;
for(int k = 2;k <= n;k ++)
{
if((c[j][k]<lowcost[k])&&(s[k]==false))
{
lowcost[k] = c[j][k];
closest[k] = j;
}
}
}
}
int sum = 0;
for(int i = 2;i <= n;i ++)
{
cout << lowcost[i] << ' ';
sum = lowcost[i]+sum;
}
cout << sum;
return 0;
}
//使用函数二维数组c**会出错,和书上不同的是C 数组