#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<stack>
#include<cstring>
#include<queue>
using std::endl;
typedef long long ll;
typedef std::pair<ll,ll> p;
typedef struct{ll nx,to,w;}node;
const ll inf=1e9;
const ll N=3e3+3;
const ll M=6e3+3;
ll n,m,cnt;
std::queue<ll> qq;
std::priority_queue<p,std::vector<p>,std::greater<p> >q;
node e[M+N];
ll dis[N],vis[N],id[N],d[N],h[N];
inline void add(ll x,ll y,ll z)
{
cnt++;
e[cnt].nx=h[x];
e[cnt].to=y;
e[cnt].w=z;
h[x]=cnt;
}
inline void djh123(ll s)
{
dis[s]=0;
q.push(std::make_pair(dis[s],s));
while (!q.empty())
{
ll x=q.top().second,z=q.top().first;
q.pop();
if (vis[x]) continue;
vis[x]=1;
dis[x]=z;
for (int i=h[x];i;i=e[i].nx)
{
ll y=e[i].to;
if (vis[y]) continue;
q.push(std::make_pair(dis[x]+e[i].w,y));
}
}
}
inline bool spfa(ll x)
{
d[x]=0;
qq.push(x);
while (!qq.empty())
{
ll x=qq.front();
qq.pop();
for (int i=h[x];i;i=e[i].nx)
{
ll y=e[i].to;
if (d[y]>d[x]+e[i].w)
{
d[y]=d[x]+e[i].w;
id[y]=id[x]+1;
if (id[y]>n) return true;
qq.push(y);
}
}
}
return false;
}
int main()
{
std::cin>>n>>m;
while (m--)
{
ll u,v,w;
std::cin>>u>>v>>w;
add(u,v,w);
}
for (int i=1;i<=m;i++) add(0,i,0),d[i]=inf;
if (spfa(0))
{
printf("-1");
return 0;
}
for (int x=1;x<=n;x++)
{
for (int i=h[x];i;i=e[i].nx)
{
ll y=e[i].to;
e[i].w+=d[x]-d[y];
}
}
for (int i=1;i<=n;i++)
{
ll ans=0;
memset(vis,0,sizeof(vis));
for (int j=1;j<=n;j++) dis[j]=inf;
djh123(i);
for (int j=1;j<=n;j++)
{
if (dis[j]==inf) ans+=j*inf;
else ans+=(ll)j*(dis[j]-h[i]+h[j]);
}
std::cout<<ans<<endl;
}
}