#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
using namespace std;
struct item {
  int v, u, st;
};
const int mxn = 5e3 + 2, mxn2 = 205;
int n, m, q, cnt;
int ans[mxn2], st[mxn2];
item info[mxn];
bool mark[mxn2], b;
vector<int> G[mxn2], component[mxn2], scc[mxn2], g, GooGooLi;
void DFS(int x) {
  mark[x] = 1;
  if (!b) {
    component[cnt].push_back(x);
    ans[x] = cnt;
  }
  for (auto a : G[x]) {
    if (!mark[a]) {
      DFS(a);
    }
  }
  if (b) {
    g.push_back(x);
  }
}
void SAGZAN(int x) {
  mark[x] = 1;
  for (auto a : scc[x]) {
    if (!mark[a]) {
      SAGZAN(a);
    }
  }
  GooGooLi.push_back(x);
}
void input() {
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    cin >> info[i].v >> info[i].u >> info[i].st;
  }
}
void solve() {
  b = 1, cnt = 0;
  for (int i = 1; i <= m; i++) {
    if (info[i].st) {
      G[info[i].v + n].push_back(info[i].u + n);
      G[info[i].v].push_back(info[i].u);
      G[info[i].u + n].push_back(info[i].v + n);
      G[info[i].u].push_back(info[i].v);
    } else {
      G[info[i].v + n].push_back(info[i].u);
      G[info[i].v].push_back(info[i].u + n);
      G[info[i].u + n].push_back(info[i].v);
      G[info[i].u].push_back(info[i].v + n);
    }
  }
  for (int i = 1; i <= 2 * n; i++) {
    if (!mark[i]) {
      DFS(i);
    }
  }
  cnt = 1, b = 0;
  for (int i = 0; i <= 2 * n; i++) {
    mark[i] = 0;
  }
  while (g.size()) {
    if (!mark[g.back()]) {
      DFS(g.back());
      cnt++;
    }
    g.pop_back();
  }
  for (int i = 1; i <= n; i++) {
    if (ans[i] == ans[i + n]) {
      cout << "Impossible\n";
      return;
    }
  }
  for (int i = 1; i <= 2 * n; i++) {
    for (auto a : G[i]) {
      if (ans[a] != ans[i]) {
        scc[ans[i]].push_back(ans[a]);
      }
    }
  }
  for (int i = 0; i <= 2 * n; i++) {
    mark[i] = 0;
  }
  for (int i = 1; i < cnt; i++) {
    if (!mark[i]) {
      SAGZAN(i);
    }
  }
  reverse(GooGooLi.begin(), GooGooLi.end());
  for (int i = 0; i <= 2 * n; i++) {
    st[i] = -1;
  }
  for (int i = 0; i < GooGooLi.size(); i++) {
    for (auto a : component[GooGooLi[i]]) {
      if (st[a] != -1) {
        continue;
      } else {
        st[a] = 1;
        if (a > n) {
          st[a - n] = 0;
        }
        if (a <= n) {
          st[a + n] = 0;
        }
      }
    }
  }
  int cnt2 = 0;
  for (int i = 1; i <= n; i++) {
    if (st[i] == 1) {
      cnt2++;
    }
  }
  cout << cnt2 << endl;
  for (int i = 1; i <= n; i++) {
    if (st[i] == 1) {
      cout << i << " ";
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  input(), solve();
  return 0;
}
