#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int maxn=320000;
int Adj[maxn],Size,n,repair[maxn];
bool vis[maxn],rep[maxn];
typedef struct node
{
int to,next,rp;
}Edge;
Edge E[maxn];
void init()
{
Size=0;
memset(Adj,-1,sizeof(Adj));
}
void Add_Edge(int u,int v,int r)
{
E[Size].to=v; E[Size].rp=r;
E[Size].next=Adj[u];
Adj[u]=Size++;
}
void dfs(int x)
{
vis[x]=true;
for(int j=Adj[x];~j;j=E[j].next)
{
int TO=E[j].to;
if(vis[TO]) continue;
if(E[j].rp==1)///不要修路
{
repair[TO]=repair[x];
dfs(TO);
}
else if(E[j].rp==2)///要修路
{
rep[TO]=true;
rep[repair[x]]=false;
repair[TO]=TO;
dfs(TO);
}
}
}
int main()
{
cin>>n;
init();
for(int i=0;i<n-1;i++)
{
int a,b,c;
cin>>a>>b>>c;
Add_Edge(a,b,c);
Add_Edge(b,a,c);
}
dfs(1);
int ans=0;
for(int i=1;i<=n;i++) if(rep[i]) ans++;
cout<<ans<<endl;
for(int i=1;i<=n;i++) if(rep[i]) cout<<i<<" ";
return 0;
}