#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define INF 100000000000000000
#define INF_2 10000000000000
long long n,m,w[20],h[420],ans,tot,dis[420],cur[420],re[20];
bool vis[420];
queue<long long> q;
struct DX
{
	long long v,w,p;
}dx[80005];
void add(long long u,long long v,long long w)
{
	dx[tot].v=v;
	dx[tot].w=w;
	dx[tot].p=h[u];
	h[u]=tot++;
}
bool BFS(long long st,long long ed)
{
	for(long long i=st;i<=ed;i++)
	{
		dis[i]=0;
		cur[i]=h[i];
	}
	dis[st]=1;
	q.push(st);
	long long u,v;
	while(!q.empty())
	{
		u=q.front();
		q.pop();
		for(long long i=h[u];~i;i=dx[i].p)
		{
			v=dx[i].v;
			if(dis[v]||!dx[i].w)
				continue;
			dis[v]=dis[u]+1;
			q.push(v);
		}
	}
	return dis[ed];
}
long long Dinic(long long u,long long ed,long long w)
{
	long long re=w;
	if(u==ed)
	{
		ans+=w;
		return w;
	}
	while(cur[u]&!dx[cur[u]].w)
		cur[u]=dx[cur[u]].p;
	for(long long i=cur[u];(~i)&&w;i=dx[i].p)
	{
		long long v=dx[i].v;
		if(dis[v]<=dis[u]||!dx[i].w)
			continue;
		long long ww=Dinic(v,ed,min(dx[i].w,w));
		if(!ww)
			dis[v]=0;
		dx[i].w-=ww;
		dx[i^1ll].w+=ww;
		w-=ww;
	}
	return re-w;
}
void dfs(int u)
{
	vis[u]=1;
	for(int i=h[u];~i;i=dx[i].p)
	{
		int v=dx[i].v;
		if(!dx[i].w)
			re[u%n]=max(re[u%n],(u-1)/n);
		else if(!vis[v])
			dfs(v);
	}
}
struct REQ
{
	long long u,v;
}req[100005];
int main()
{
	memset(h,-1,sizeof(h));
	scanf("%lld%lld",&n,&m);
	long long a,st=0,ed=n*(n+1)+1;
	for(long long i=1;i<=m;i++)
	{
		scanf("%lld%lld%lld",&req[i].v,&req[i].u,&a);
		w[req[i].u]-=a;
		w[req[i].v]+=a;
	}
	for(long long i=1;i<=m;i++)
		for(long long j=0;j<n;j++)
		{
			add(req[i].u+j*n,req[i].v+(j+1)*n,INF);
			add(req[i].v+(j+1)*n,req[i].u+j*n,0);
		}
	for(long long i=1;i<=n;i++)
	{
		add(0,i,INF);
		add(i,0,0);
		for(int j=0;j<n;j++)
		{
			add(i+j*n,i+(j+1)*n,w[i]*j+INF_2);
			add(i+(j+1)*n,i+j*n,0);
		}
		add(i+n*n,ed,INF);
		add(ed,i+n*n,0);
	}
	while(BFS(st,ed))
		Dinic(st,ed,INF);
	memset(vis,0,sizeof(vis));
	dfs(st);
	for(int i=1;i<=n;i++)
		printf("%lld ",re[i%n]);
	return 0;
}