#include<bits/stdc++.h>
using namespace std;
int n,m;
long long h[3005],dis[3005];
bool vis[3005];
int t[3005];
const long long INF=1e10;
int head[3005];
struct emm{
int v,next;
long long w;
}e[9005];
bool spfa(){
queue<int> q;
memset(h,63,sizeof(h));
h[0]=0,vis[0]=1;
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(h[v]>h[u]+e[i].w){
h[v]=h[u]+e[i].w;
if(!vis[v]){
vis[v]=1;
q.push(v);
t[v]++;
if(t[v]==n+1)return 0;
}
}
}
}
return 1;
}
void dijkstra(int s){
priority_queue<pair<long long,int> > q;
for(int i=1;i<=n;i++)dis[i]=INF;
memset(vis,0,sizeof(vis));
dis[s]=0;
q.push({0,s});
while(!q.empty()){
int u=q.top().second;q.pop();
if(vis[u])continue;
vis[u]=1;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(dis[v]>dis[u]+e[i].w){
dis[v]=dis[u]+e[i].w;
if(!vis[v])q.push({-dis[v],v});
}
}
}
return;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int u;
scanf("%d%d%lld",&u,&e[i].v,&e[i].w);
e[i].next=head[u];
head[u]=i;
}
for(int i=1;i<=n;i++){
int u=i+m;
e[u].v=i;e[u].w=0;
e[u].next=head[0];
head[0]=u;
}
if(!spfa()){
printf("-1");
return 0;
}
for(int u=1;u<=n;u++)
for(int i=head[u];i;i=e[i].next)
e[i].w+=h[u]-h[e[i].v];
for(int i=1;i<=n;i++){
dijkstra(i);
long long ans=0;
for(int j=1;j<=n;j++){
if(dis[j]==INF)ans+=1ll*j*1e9;
else ans+=1ll*j*(dis[j]+h[j]-h[i]);
}
printf("%lld\n",ans);
}
return 0;
}
蟹蟹qwq