#include using namespace std; const int inf=(1<<30)-1; const int maxn=100010; #define REP(i,n) for(int i=(0);i<(n);i++) #define FOR(i,j,n) for(int i=(j);i<=(n);i++) typedef long long ll; int n,m; int f[maxn]; struct data{ int x,y,v; bool operator <(const data &b) const { return v>b.v; } }e[maxn<<1],ans[maxn<<1]; int tot=0,cnt=0; void init() { for(int i=1;i<=n;i++) f[i]=i; tot=0; cnt=0; } int get(int x) { return (x==f[x])?x:f[x]=get(f[x]); } bool cmp(const data &a,const data &b) { if(a.x!=b.x) return a.x G[maxn]; void add(int x,int y,int v) { G[x].push_back((node){y,v}); G[y].push_back((node){x,v}); } bool vis[maxn]; bool mp[maxn]; bool cc[maxn]; int main() { //freopen("1.txt","r",stdin); //freopen("2.txt","w",stdout); while(~scanf("%d%d",&n,&m)) { for(int i=0;i<=n;i++) G[i].clear(); init(); memset(mp,0,sizeof(mp)); memset(cc,0,sizeof(cc)); int ty=0; for(int i=1;i<=m;i++) { int x,y,v; scanf("%d%d%d",&x,&y,&v); if(x>y) swap(x,y); if(x!=y) e[++tot]=(data){x,y,v}; if(!mp[x]) mp[x]=1,ty++; if(!mp[y]) mp[y]=1,ty++; } if(ty g; for(int j=cnt;j>=1;j--) { int x=ans[j].x,y=ans[j].y; if(!cc[x]) g.push_back(x),cc[x]=1; if(!cc[y]) g.push_back(y),cc[y]=1; } for(int k=0;k