#include<bits/stdc++.h>
#define N 5010
using namespace std;
int n,m,a,b,d,f,ans,top,t[N],l[N],ed[N],now[N],sta[N];
bool p[N];
vector <int> q[N];
inline void read(int &x)
{
x = 0;
int f = 1;
char s = getchar();
while(s < '0' || s > '9')
{
if(s == '-') f = -1;
s = getchar();
}
while(s >= '0' && s <= '9')
{
x = x * 10 + s - 48;
s = getchar();
}
x *= f;
return;
}
void dfs(int r)
{
sta[++ top] = r;
++ d;
t[r] = d,l[r] = d;
for(int i = 0;i < q[r].size();i ++)
{
int v = q[r][i];
if(!t[v])
{
dfs(v);
l[r] = min(l[r],l[v]);
}
else if(p[v]) l[r] = min(l[r],t[v]);
}
if(t[r] == l[r])
{
int plus = 1;
while(sta[top] != r)
{
now[plus ++] = sta[top];
top --;
}
now[plus] = r;
if(plus > ans)
{
for(int i = 1;i <= plus;i ++)
ed[i] = now[i];
ans = plus;
}
top --;
}
}
int main()
{
read(n),read(m);
for(int i = 1;i <= m;i ++)
{
read(a),read(b),read(f);
q[a].push_back(b);
if(f == 2) q[b].push_back(a);
}
for(int i = 1;i <= n;i ++) if(!t[i]) dfs(i);
printf("%d\n",ans);
for(int i = ans;i > 1;i --) printf("%d ",ed[i]);
printf("%d\n",ed[1]);
return 0;
}