#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10000 + 10;
vector<int> adj[MAXN];
vector<int> adjp[MAXN];
vector<int> adjm[MAXN];
int vdps[MAXN];
int ans[MAXN];
vector<int> p;
int n, m, t = 3;
int dps[MAXN];
bool mark1[MAXN], mark2[MAXN];
void DFS1(int v) {
  mark1[v] = 1;
  for (int i = 0; i < (int)adj[v].size(); i++)
    if (!mark1[adj[v][i]]) DFS1(adj[v][i]);
  p.push_back(v);
}
void DFS2(int v) {
  mark2[v] = 1;
  dps[v] = t;
  for (int i = 0; i < adjp[v].size(); i++)
    if (!mark2[adjp[v][i]]) DFS2(adjp[v][i]);
}
void DFS_ALL() {
  for (int i = 1; i <= 2 * n; i++)
    if (!mark1[i]) DFS1(i);
}
void DFS_ALL2() {
  t = 0;
  for (int i = (int)p.size() - 1; i >= 0; i--) {
    if (!mark2[p[i]]) {
      DFS2(p[i]);
      vdps[t] = p[i];
      t++;
    }
  }
}
void DFS3(int v) {
  mark1[v] = 1;
  for (int i = 0; i < adjm[v].size(); i++)
    if (!mark1[adjm[v][i]]) DFS3(adjm[v][i]);
  p.push_back(v);
}
void DFS_DAG() {
  for (int i = 0; i < t; i++) {
    if (!mark1[i]) DFS3(i);
  }
}
int main() {
  cin >> n >> m;
  for (int a, b, c, i = 0; i < m; i++) {
    cin >> a >> b >> c;
    if (c == 0) {
      adj[a].push_back(b + n);
      adj[b].push_back(a + n);
      adj[a + n].push_back(b);
      adj[b + n].push_back(a);
      adjp[b + n].push_back(a);
      adjp[a + n].push_back(b);
      adjp[b].push_back(a + n);
      adjp[a].push_back(b + n);
    } else {
      adj[a].push_back(b);
      adj[b + n].push_back(a + n);
      adj[a + n].push_back(b + n);
      adj[b].push_back(a);
      adjp[b].push_back(a);
      adjp[a + n].push_back(b + n);
      adjp[b + n].push_back(a + n);
      adjp[a].push_back(b);
    }
  }
  DFS_ALL();
  DFS_ALL2();
  for (int i = 1; i <= 2 * n; i++)
    for (int j = 0; j < adj[i].size(); j++)
      if (dps[i] != dps[adj[i][j]]) adjm[dps[i]].push_back(dps[adj[i][j]]);
  for (int i = 0; i <= t; i++) {
    mark1[i] = 0;
    mark2[i] = 0;
  }
  p.clear();
  for (int i = 1; i <= n; i++) {
    if (dps[i] == dps[i + n]) {
      cout << "Impossible" << endl;
      return 0;
    }
  }
  p.clear();
  DFS_DAG();
  for (int i = 0; i < p.size(); i++) {
    if (!mark2[p[i]]) {
      ans[p[i]] = 1;
      mark2[p[i]] = 1;
      if (vdps[p[i]] > n) {
        ans[dps[vdps[p[i]] - n]] = 0;
        mark2[dps[vdps[p[i]] - n]] = 1;
      } else {
        ans[dps[vdps[p[i]] + n]] = 0;
        mark2[dps[vdps[p[i]] + n]] = 1;
      }
    }
  }
  int cnt = 0;
  for (int i = 1; i <= n; i++) {
    if (ans[dps[i]]) cnt++;
  }
  cout << cnt << endl;
  for (int i = 1; i <= n; i++)
    if (ans[dps[i]]) cout << i << " ";
  return 0;
}
