namespace Boruvka
{
using piii=pair<pair<int,int>,int>;
vector<piii> E;
int cnt,sum,flag;
int best[MAX],used[MAX*40];
namespace DSU
{
int N;
int fa[MAX],siz[MAX];
inline void init() {for(int i=1;i<=N;++i) fa[i]=i,siz[i]=1;}
int find(int x) {if(fa[x]==x) return x; return fa[x]=find(fa[x]);}
inline void merge(int x,int y) {x=find(x),y=find(y); if(siz[x]<siz[y]) Swp(x,y); siz[x]+=siz[y],fa[y]=x;}
}
using namespace DSU;
inline void solve()
{
auto better=[&](int a,int b)->bool
{
if(!(~b)) return 1;
if(E[a].se!=E[b].se) return E[a].se<E[b].se;
return a<b;
};
N=n,init();
do
{
flag=0,memset(best,-1,sizeof best);
for(int i=0;i<((int)E.size());++i)
{
int x=E[i].fi.fi,y=E[i].fi.se;
x=find(x),y=find(y);
if(x==y||used[i]) continue;
if(better(i,best[x])) best[x]=i;
if(better(i,best[y])) best[y]=i;
}
for(int i=1,id=best[i];i<=n;++i,id=best[i]) if(~id&&!used[id]) flag=1,++cnt,sum+=E[id].se,merge(E[id].fi.fi,E[id].fi.se),used[id]=1;
}while(flag);
}
}
using namespace Boruvka;