#include <fstream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;


int v[2000], x[2000], y[2000], c[2000];

int valid(int i)
{
    switch(c[i])
    {
        case 0: return v[x[i]] || v[y[i]]; break;
        case 1: return v[x[i]] || !v[y[i]]; break;
        case 2: return v[y[i]] || !v[x[i]]; break;
        case 3: return v[x[i]]+v[y[i]] != 2;
    }
    return 1;
}

void random(int i)
{
    int r = rand()%2; r++;
    if(r == 1)
        v[x[i]] = !v[x[i]];
    if(r == 2)
        v[y[i]] = !v[y[i]];
}

int main()
{
    ifstream in("party.in");
    ofstream out("party.out");

    int i, n, m, nr=0;
    in>>n>>m;
    for(i=1; i<=m; i++)
        in>>x[i]>>y[i]>>c[i];
    for(i=1; i<=n; i++)
        v[i] = 1;
    while(1)
    {
        for(i=1; i<=m; i++)
            if(valid(i) == 0)
            {
                random(i);
                break;
            }
        if(i == m+1)
            break;
    }
    for(i=1; i<=n; i++)
        if(v[i])
            nr++;
    out<<nr<<'\n';
    for(i=1; i<=n; i++)
        if(v[i])
            out<<i<<'\n';
}