#include <bits/stdc++.h>
#define For(i,a,b) for(int i=a;i<=b;i++)
#define Rev(i,a,b) for(int i=a;i>=b;i--)
#define clr(a,val) memset(a,val,sizeof(a))
//#define int long long
using namespace std;

const int N=3e3+5;

int n,m,head[N],to[N],nxt[N],edge[N],tot;
int dis[N],ins[N];

void add(int x,int y,int w)
{
	nxt[++tot]=head[x];
	head[x]=tot;
	to[tot]=y;
	edge[tot]=w;
}

//void dfs(int u,int d)
//{
//	if(!ins[u]){
//		ins[u]=1;
//		if(dis[u]>d){
//			dis[u]=d;
//			for(int e=head[u];e;e=nxt[e]){
//				int v=to[e];
//				dfs(v,d+edge[e]);
//			}
//		}
//		ins[u]=0;
//	}
//	else{
//		assert(d>dis[u]);
//		ans[u]=min(ans[u],d-dis[u]);
//	}
//}

int cur,ans=1e9;

void dfs(int u)
{
	for(int e=head[u];e;e=nxt[e]){
		int v=to[e];
		if(v==cur){
			ans=min(ans,dis[u]+edge[e]);
			continue;
		}
		if(dis[v]>dis[u]+edge[e]){
			dis[v]=dis[u]+edge[e];
			dfs(v);
		}
	}
}

priority_queue< pair<int,int> > q;

int vis[N],cc[N];

signed main()
{
	cin>>n>>m;
	
	For(i,1,n) cc[i]=1e9;
	
	For(i,1,m){
		int x,y,w;
		cin>>x>>y>>w;
//		if(x==y) cc[i]=min(cc[i],w);
		add(x,y,w);
	}
	
//	For(i,1,n+1){
//		ans[i]=1e9;
//		dis[i]=1e9;
//	}
	
//	dis[n+1]=0;
//	
//	q.push(make_pair(0,n+1));
//	
//	while(q.size()){
//		int u=q.top().second;
//		q.pop();
//		
//		if(vis[u]) continue;
//		vis[u]=1;
//		
//		for(int e=head[u];e;e=nxt[e]){
//			int v=to[e];
//			if(dis[v]>dis[u]+edge[e]){
//				dis[v]=dis[u]+edge[e];
//				q.push(make_pair(-dis[v],v));
//			}
//		}
//	}
//	
//	For(i,1,n) cout<<dis[i]<<endl;
//	
//	dfs(n+1,0);
	
	For(i,1,n){
		clr(dis,0x3f);
		cur=i;
		dis[i]=0;
		ans=cc[i];
		dfs(i);
		if(ans<1e9) cout<<ans<<endl;
		else cout<<-1<<endl;
	}
	
	return 0;
}








#include <bits/stdc++.h>
#define inf 1e9
using namespace std;
const int N = 2e3 + 101; 
struct Edge{
	int nex, to, dis;
}edge[N*2];
int tot, head[N], dis[N];
int dist[N][N], ans[N], vis[N];
struct node{
	int u, dis;
	bool operator < (const node &a) const{
	    return dis > a.dis;
	}
};
priority_queue<node>q;
int n, m;

void add(int from,int to,int dis)
{
	edge[++ tot].nex = head[from];
	edge[tot].to = to;
	edge[tot].dis = dis;
	head[from] = tot;
}

void dij(int s)
{
	for(int i = 1;i <= n; i++) dis[i] = inf, vis[i] = 0;
	dis[s] = 0;q.push((node){s,0});
	while(!q.empty())
	{
		int u = q.top().u;
		q.pop();
		if(vis[u]) continue;
		vis[u] = 1;
		for(int i = head[u];i;i = edge[i].nex)
		{
			int v = edge[i].to;
			if(dis[v] > dis[u] + edge[i].dis)
			{
				dis[v] = dis[u] + edge[i].dis;
				q.push((node){v,dis[v]});
			}
		}
	}
	for(int j = 1;j <= n; j++) dist[s][j] = dis[j];
}

signed main()
{
	scanf("%d%d",&n,&m);
	for(int i = 1;i <= n; i++)
	    for(int j = 1;j <= n; j++)
	        dist[i][j] = inf, ans[i] = inf;
	for(int i = 1;i <= m; i++)
	{
		int u, v, w;scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
		if(u == v) ans[u] = min(ans[u],w);
	} 
	for(int i = 1;i <= n; i++) dij(i);
	for(int i = 1;i <= n; i++)
	for(int j = 1;j <= n; j++)
	    if(i != j) ans[i] = min(ans[i],dist[i][j] + dist[j][i]);
	for(int i = 1;i <= n; i++) 
	    printf("%d\n",ans[i] == inf ? -1 : ans[i]);
}
