#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int vis[51][maxn],dis[51][maxn];
int head[maxn];
const int inf=0x3f3f3f3f;
struct edge{
    int next,to,l;
}e[maxn*2];
struct node{
    int u,pre,dis;
    bool operator <(const node &k)const{
        return dis>k.dis;
    }
};
int cnt;
void add(int x,int y,int l){
    e[cnt].to=y;
    e[cnt].l=l;
    e[cnt].next=head[x];
    head[x]=cnt++;
}
priority_queue<node> q;
void dij(){
    memset(dis,inf,sizeof(dis));
    dis[0][1]=0;
    q.push(node{1,0,0});
    while(!q.empty()){
        node u=q.top();
        q.pop();
        if(vis[u.pre][u.u])continue;
        vis[u.pre][u.u]=1;
        for(int i=head[u.u];i!=-1;i=e[i].next){
            int v=e[i].to,l=e[i].l;
            if(u.pre==0){
                if(u.dis+l<dis[l][v]){
                    dis[l][v]=u.dis+l;
                    q.push(node{v,l,dis[l][v]});
                }
            }else{
                int tmp=u.dis-u.pre+(u.pre+l)*(u.pre+l);
                if(tmp<dis[0][v]){
                    dis[0][v]=tmp;
                    q.push(node{v,0,tmp});
                }
            }
        }
    }
}
int main(){
    int n,m,x,y,l;
    memset(head,-1,sizeof(head));
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>x>>y>>l;
        add(x,y,l);
        add(y,x,l);
    }
    dij();
    for(int i=1;i<=n;i++){
        if(dis[0][i]==inf)cout<<"-1 ";
        else cout<<dis[0][i]<<" ";
    }
    return 0;
}