#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN=200010,M=1011451423,M2=11451403,M3=114514191981019,M4=114514191981000001;unsigned long long base=131;
int n,m,k,fa[MAXN],ans[MAXN];
struct Edge{
int u,v,w,t;
}a[MAXN];
int find(int x){
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
bool cmp1(Edge x,Edge y){
return x.w>y.w;
}
bool cmp2(Edge x,Edge y){
return x.t<y.t;
}
bool check(){
for(int i=1;i<=n;i++){
if(find(1)!=find(i))return 0;
}
return 1;
}
signed main(){
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld",&a[i].u,&a[i].v,&a[i].w);
}
sort(a+1,a+m+1,cmp1);
int cnt=0;
for(int i=1;i<=m;i++){
int x=find(a[i].u),y=find(a[i].v);
if(x!=y){
fa[x]=fa[y];
if(a[i].w==0){
cnt++,a[i].t=1;
//cout<<a[i].t<<endl;
}
}
}
for(int i=1;i<=m;i++){
if(!a[i].t)a[i].t=2;
if(a[i].w==1)a[i].t=3;
}
if(cnt>k||!check()){printf("no solution");return 0;}
sort(a+1,a+m+1,cmp2);cnt=0;int tot=0;
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=m;i++){
int x=find(a[i].u),y=find(a[i].v);
if(x!=y){
if(a[i].w==1||cnt<k){
ans[++tot]=i;
fa[x]=fa[y];
cnt++;
}
//cout<<a[i].w<<" "<<i<<" "<<cnt<<" "<<k<<endl;
}
//cout<<x<<" "<<y<<endl;
}
if(cnt<k||!check()){printf("no solution");return 0;}
for(int i=1;i<=tot;i++){
printf("%lld %lld %lld\n",a[ans[i]].u,a[ans[i]].v,a[ans[i]].w);
}
return 0;
}
有没有大佬帮帮忙,孩子已经改了一个上午了!!QAQ