#include <stdio.h>
#include <stdlib.h>
#include <time.h>



bool sol[115];

struct relation
{
 int x, y, type;
} x[1024];

bool bad(relation A)
{
 if (A.type == 0 && sol[A.x] == 0 && sol[A.y] == 0)
  return true;
 if (A.type == 1 && sol[A.x] == 0 && sol[A.y] == 1)
  return true;
 if (A.type == 2 && sol[A.x] == 1 && sol[A.y] == 0)
  return true;
 if (A.type == 3 && sol[A.x] == 1 && sol[A.y] == 1)
  return true;
 return false;
}

int main()
{
 int i, N, M, cnt = 0;

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

 srand(time(0));

 scanf("%d%d", &N, &M);
 for (i = 1; i <= M; i ++)
  scanf("%d%d%d", &x[i].x, &x[i].y, &x[i].type);

 bool isSolution;

 do
 {
  isSolution = true;
  for (i = 1; i <= M; i ++)
   if (bad(x[i]))
   {
    int X = x[i].x, Y = x[i].y;
    int which = rand() % 2;
    if (which == 0)
    {
     cnt = cnt - sol[X];
     sol[X] = 1 - sol[X];
     cnt = cnt + sol[X];
    }
    else
    {
     cnt = cnt - sol[Y];
     sol[Y] = 1 - sol[Y];
     cnt = cnt + sol[Y];
    }
    isSolution = false;
    break;
   }

  if (cnt == 0 && isSolution == true)
  {
   sol[rand() % N + 1] = 1; cnt ++;
   isSolution = false;
  }
 }
 while (isSolution == false);

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

 return 0;
}