#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]<<   ;           }       }          }