#include <bits/stdc++.h>
using namespace std;
long long a[110000];
vector<long long> g[202000];
long long vis[220000];
vector<long long> v[220000];
vector<long long> order;
long long color[220000];
void dfs(long long s) {
  vis[s] = 1;
  if (g[s].empty() == 0) {
    for (long long i = 0; i < g[s].size(); i++) {
      if (vis[g[s][i]] == 0) dfs(g[s][i]);
    }
  }
  order.push_back(s);
}
void dfs2(long long s, long long c) {
  color[s] = c;
  if (g[s].empty() == 0) {
    for (long long i = 0; i < g[s].size(); i++) {
      if (color[g[s][i]] == 0) dfs2(g[s][i], c);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n, m, i, j;
  cin >> n >> m;
  for (i = 1; i <= m; i++) {
    long long x, y, z;
    cin >> x >> y >> z;
    if (z) {
      g[x].push_back(y);
      g[y].push_back(x);
      g[x + n].push_back(y + n);
      g[y + n].push_back(x + n);
    } else {
      g[x].push_back(y + n);
      g[y + n].push_back(x);
      g[x + n].push_back(y);
      g[y].push_back(x + n);
    }
  }
  for (i = 1; i <= n + n; i++) {
    if (vis[i] == 0) {
      dfs(i);
    }
  }
  long long cc = 1;
  for (i = n + n - 1; i >= 0; i--) {
    if (color[order[i]] == 0) dfs2(order[i], cc++);
  }
  long long fl = 0;
  for (i = 1; i <= n; i++) {
    if (color[i] == color[i + n]) fl = 1;
  }
  if (fl) {
    cout << "Impossible";
    return 0;
  }
  for (i = 1; i <= n; i++) {
    long long x = color[i];
    long long y = color[i + n];
    if (a[x] == 0 && a[y] == 0) {
      a[x] = 1;
      a[y] = 2;
    } else if (a[x] == 0)
      a[x] = 3 - a[y];
    else
      a[y] = 3 - a[x];
  }
  long long ans = 0;
  for (i = 1; i <= n; i++)
    if (a[color[i]] == 2) ans++;
  cout << ans << "\n";
  for (i = 1; i <= n; i++) {
    if (a[color[i]] == 2) cout << i << " ";
  }
  return 0;
}
