#include <bits/stdc++.h>
using namespace std;

#define S size()
#define EN end()
#define BE begin()
#define LEN length()

#define endl "\n"
#define cnt count
#define in insert
#define er erase
#define fi first
#define se second
#define ld double
#define int long long

#define gcd __gcd
#define mp make_pair
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define bs binary_search
#define np next_permutation

#define si set<int>
#define sc set<char>
#define mll map<int,int>
#define vi vector<int>
#define vc vector<char>
#define pll pair<int,int>
#define vpi vector<pll>
#define msi multiset<int>
#define msc multiset<char>
#define vvi vector<vector<int>>

#define mod1 1000000007
#define mod2 998244353
#define inf (int)1e9
#define eness(x) __builtin_ctzll(x)
#define nhigh(x) __builtin_popcountll(x)
#define PI 3.1415926535897932384626433832

#define iter(s) for(auto it:s)
#define forl(i,n) for(int i=0;i<n;i++)
#define fore(i,n) for(int i=1;i<=n;i++)
#define forn(i,n) for(int i=n-1;i>=0;i--)
#define forls(i,l,r) for(int i=l;i<r;i++)
#define forns(i,l,r) for(int i=r-1;i>=l;i--)

#define all(v) v.BE,v.EN
#define SORT(ar,n) sort(ar,ar+n)
#define rall(v) v.rbegin(),v.rend()
#define RSORT(ar,n) sort(ar,ar+n,greater<int>())

#define pat int n;cin>>n;
#define wq int q;cin>>q;fore(_,q)
#define nokay cout<<(ok?"Yes\n":"No\n");
#define tak(s) string s;cin>>s;int n=s.LEN;
#define pat1 int n;cin>>n;int ar[n];forl(i,n) cin>>ar[i];
#define pat2 int n,k;cin>>n>>k;int ar[n];forl(i,n) cin>>ar[i];
#define fastio ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//**********************************
vi mf,mi;
int POW(int x,int y);
int MI(int x,int mod);
void pre_f(int x,int mod);
void pre_i(int x,int mod);
int C(int x,int y,int mod);
int bpow(int x,int y,int mod);

int POW(int x,int y){
    return bpow(x,y,inf);
}
int MI(int x,int mod=mod1){
    return bpow(x,mod-2,mod);
}
void pre_f(int x,int mod=mod1){
    mf=vi(x+1,1);
    forls(i,2,x+1){
        mf[i]=mf[i-1]*i;
        mf[i]%=mod;
    }
    return;
}
void pre_i(int x,int mod=mod1){
    mi=vi(x+1);
    forl(i,x+1){
        mi[i]=MI(mf[i],mod);
    }
    return;
}
int C(int x,int y,int mod=mod1){
    if(x<y) return 0;
    int n1=mf[x];
    int n2=mi[y];
    int n3=mi[x-y];
    int res=(n1*n2)%mod;
    res=(res*n3)%mod;
    return res;
}
int bpow(int x,int y,int mod=mod1){
    x%=mod;
    int res=1;
    while(y>0){
        if(y&1){
            res=res*x%mod;
        }
        x=x*x%mod;
        y>>=1;
    }
    return res;
}
//**********************************
const int N=200001;
vector<vector<array<int,2>>> adj(N);
int32_t main(){
    #ifndef ONLINE_JUDGE
        freopen("./input.txt", "r", stdin);
        freopen("./output.txt", "w", stdout);
    #endif
    fastio;
    int n,m;
    cin>>n>>m;
    int dis[n+1][51];
    forl(i,n+1){
        forl(j,51){
            dis[i][j]=inf;
        }
    }

    forl(i,m){
        int u,v,w;
        cin>>u>>v>>w;
        adj[u].pb({v,w});
        adj[v].pb({u,w});
    }
    dis[1][0]=0;
    //i*51+j -> row dom.
    set<array<int,2>> pq;
    pq.in({0,51});
    //int t=100;
    while(!pq.empty()/* && t--*/){
        //auto itt=pq.BE
        set<array<int,2>>::iterator itt=pq.BE;
        array<int,2> x=*itt;
        pq.er(itt);
        int d=x[0],p=x[1]%51,u=x[1]/51;
        iter(adj[u]){
            int v=it[0],w=it[1];
            //cout<<u<<' '<<v<<' '<<p<<"\n";
            if(p==0){
                int dd=(d);
                if(dis[v][w]>dd){
                    set<array<int,2>>::iterator fin=pq.find({dis[v][w],v*51+w});
                    if(fin!=pq.end()){
                        pq.er(fin);
                    }
                    dis[v][w]=dd;
                    pq.in({dd,v*51+w});
                }
            }
            else{
                int dd=(d+(p+w)*(p+w));
                if(dis[v][0]>dd){
                    set<array<int,2>>::iterator fin=pq.find({dis[v][0],v*51});
                    if(fin!=pq.end()){
                        pq.er(fin);
                    }
                    dis[v][0]=dd;
                    pq.in({dd,v*51});
                }
            }
        }
    }
    fore(i,n){
        if(dis[i][0]==inf){
            cout<<-1<<' ';
        }
        else{
            cout<<dis[i][0]<<' ';
        }
    }
    
}