#include<stdio.h>
#include<iostream>
#include<string.h>
#include<vector>
using namespace std;
vector<int> v[10004],vt[10004];
int t[10004],nrt,n,m,sol[10004];
int a=0,b=0,tip=-1;
char viz[10004];

void dfs(int nod)
{
    viz[nod]=1;
    int i,vec,lim=v[nod].size();

    for(i=0;i<lim;i++)
        if(!viz[vec=v[nod][i]])
            dfs(vec);
    t[++nrt]=nod;
}

void dfs2(int nod)
{
    viz[nod]=1;
    sol[(nod<=n ? nod+n : nod-n)]=1;

    int i,vec,lim=vt[nod].size();

    for(i=0;i<lim;i++)
        if(!viz[vec=vt[nod][i]])
            dfs2(vec);

}

int main ()
{
    int i;

    freopen("party.in","r",stdin);
    freopen("party.out","w",stdout);

    scanf("%d%d",&n,&m);

    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a,&b,&tip);


        if(!tip)
        {
            v[(a<=n ? a+n : a-n)].push_back(b);
            v[(b<=n ? b+n : b-n)].push_back(a);
            vt[b].push_back((a<=n ? a+n : a-n));
            vt[a].push_back((b<=n ? b+n : b-n));
        }
        else if(tip==1)
        {
            v[(a<=n ? a+n : a-n)].push_back((b<=n ? b+n : b-n));
            vt[(b<=n ? b+n : b-n)].push_back((a<=n ? a+n : a-n));
            v[b].push_back(a);
            vt[a].push_back(b);

        }
        else if(tip==2)
        {
            v[(b<=n ? b+n : b-n)].push_back((a<=n ? a+n : a-n));
            vt[(a<=n ? a+n : a-n)].push_back((b<=n ? b+n : b-n));
            v[a].push_back(b);
            vt[b].push_back(a);
        }
        else
        {
            vt[(a<=n ? a+n : a-n)].push_back(b);
            vt[(b<=n ? b+n : b-n)].push_back(a);
            v[b].push_back((a<=n ? a+n : a-n));
            v[a].push_back((b<=n ? b+n : b-n));

        }

    }

    for(i=1;i<=2*n;i++)
        if(!viz[i])
            dfs(i);
    memset(viz,0,sizeof(viz));


    for(i=2*n;i>=1;i--)
        if(!viz[t[i]] && !viz[(t[i]<=n ? t[i]+n : t[i]-n)])
            dfs2(t[i]);

    for(i=1;i<=n;i++)
        if(sol[i])
            sol[0]++;

    printf("%d\n",sol[0]);

    for(i=1;i<=n;i++)
        if(sol[i])
            printf("%d\n",i);
    return 0;
}