#include<bits/stdc++.h>
#define fre(x) freopen(#x".in","r",stdin);freopen(#x".out","w",stdout)
#define ll long long
#define pii pair<int,int> 
#define mk make_pair
using namespace std;
inline int read(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9') { if(c=='-') f=-1;c=getchar(); }
	while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^'0'),c=getchar();
	return x*f;
}
const int N=1e5+5,inf=0x3f3f3f3f;
int n,m;
int dis[N*52];
vector<pii>e[N*52];
inline void add(int x,int y,int v){
	e[x*51].push_back({0,y*51+v});
	for(int i=1;i<=50;i++) e[x*51+i].push_back({(i+v)*(i+v),y*51});
}
set<pii>st;
int main(){
	n=read(),m=read();
	for(int i=1;i<=m;i++){
		int x=read(),y=read(),v=read();
		add(x,y,v);
		add(y,x,v);
	}
	memset(dis,0x3f,sizeof(dis));
	dis[1*51]=0;
	st.insert({0,1*51});
	while(st.size()>0){
		int x=st.begin()->second;
		st.erase(st.begin());
		for(auto i:e[x]){
			int y=i.second,w=dis[x]+i.first;
//			printf("%d %d %d\n",x,y,w);
			if(dis[y]>w){
				st.erase({dis[y],y});
				dis[y]=w;
				st.insert({dis[y],y});
			}
		}
	}
	for(int i=1;i<=n;i++) printf("%d ",dis[i*51]==inf?-1:dis[i*51]);
	return 0;
}