#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3010,M=6010;
#define mk make_pair
#define pii pair<int,int>
int n,m;
int tot,head[N],nxt[M],to[M],cnt[N],inf;
bool vis[N],inq[N];
int dis[N],val[M],h[N];
void add(int u,int v,int w){
tot++;nxt[tot]=head[u];to[tot]=v;head[u]=tot;val[tot]=w;
}
bool spfa(int st){
for(int i=0;i<=n;i++){
h[i]=1e9;
}
h[st]=0;
inq[st]=1;
cnt[st]=1;
queue<int> q;
q.push(st);
while(!q.empty()){
int u=q.front();q.pop();
inq[u]=0;
for(int i=head[u];i;i=nxt[i]){
int v=to[i],w=val[i];
if((ll)(h[u]+w)<h[v]){
h[v]=h[u]+w;
if(!inq[v]){
q.push(v);
inq[v]=1;
cnt[v]++;
if(cnt[v]==n+1){
return 0;
}
}
}
}
}
return 1;
}
void Dijkstra(int st){
for(int i=1;i<=n;i++)dis[i]=1e9,vis[i]=0;
dis[st]=0;
priority_queue< pii,vector<pii>,greater<pii> > q;
q.push(mk(0,st));
while(!q.empty()){
int u=q.top().second;q.pop();
if(vis[u])continue;
vis[u]=1;
for(int i=head[u];i;i=nxt[i]){
int v=to[i],w=val[i];
if((ll)(dis[u]+w)<dis[v]){
dis[v]=dis[u]+w;
if(vis[v]==0)q.push(mk(dis[v],v));
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
for(int i=1;i<=n;i++)add(0,i,0);
if(!spfa(0)){
printf("-1\n");
return 0;
}
for(int u=1;u<=n;u++){
for(int i=head[u];i;i=nxt[i]){
int v=to[i];
val[i]=h[u]-h[v]+val[i];
}
}
for(int i=1;i<=n;i++){
Dijkstra(i);
ll ans=0;
for(ll j=1;j<=n;j++){
if(i==j)continue;
if(dis[j]==1e9){
ans+=j*1e9;
}else{
ans+=j*(dis[j]-h[i]+h[j]);
}
}
cout<<ans<<endl;
}
return 0;
}