#include <bits/stdc++.h>
using namespace std;
constexpr int M = 107;
int var[M << 1];
vector<int> g[M << 1];
vector<int> gt[M << 1];
bool o[M << 1];
bool ot[M << 1];
vector<pair<int, int> > post;
vector<pair<int, int> > postt;
vector<int> ans;
int sp[M << 1];
int czas = 0, czast = 0, k = 0;
void dfs(int v) {
  o[v] = 1;
  for (auto w : g[v])
    if (!o[w]) dfs(w);
  post.push_back({++czas, v});
}
void dfst(int v) {
  ot[v] = 1;
  for (auto w : gt[v])
    if (!ot[w]) dfst(w);
  postt.push_back({++czast, v});
}
void scc(int v) {
  sp[v] = k;
  for (auto w : gt[v])
    if (!sp[w]) scc(w);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, m, a, b, c;
  cin >> n >> m;
  for (int i = 2; i <= (n << 1) + 1; i++) var[i] = -1;
  for (int i = 1; i <= m; i++) {
    cin >> a >> b >> c;
    if (c) {
      g[a * 2].push_back(b * 2);
      g[b * 2].push_back(a * 2);
      gt[b * 2].push_back(a * 2);
      gt[a * 2].push_back(b * 2);
      g[(a * 2) + 1].push_back((b * 2) + 1);
      g[(b * 2) + 1].push_back((a * 2) + 1);
      gt[(b * 2) + 1].push_back((a * 2) + 1);
      gt[(a * 2) + 1].push_back((b * 2) + 1);
    } else {
      g[(a * 2) + 1].push_back(b * 2);
      g[(b * 2) + 1].push_back(a * 2);
      gt[b * 2].push_back((a * 2) + 1);
      gt[a * 2].push_back((b * 2) + 1);
      g[a * 2].push_back((b * 2) + 1);
      g[b * 2].push_back((a * 2) + 1);
      gt[(a * 2) + 1].push_back(b * 2);
      gt[(b * 2) + 1].push_back(a * 2);
    }
  }
  for (int i = 2; i <= (n << 1) + 1; i++) {
    if (!o[i]) dfs(i);
    if (!ot[i]) dfst(i);
  }
  sort(post.begin(), post.end());
  sort(postt.begin(), postt.end());
  reverse(post.begin(), post.end());
  reverse(postt.begin(), postt.end());
  for (auto w : post) {
    if (sp[w.second]) continue;
    k++;
    scc(w.second);
  }
  for (int i = 1; i <= n; i++) {
    if (sp[2 * i] == sp[(2 * i) + 1]) {
      cout << "Impossible\n";
      return 0;
    }
    if (sp[2 * i] > sp[(2 * i) + 1]) {
      var[2 * i] = 1;
      var[(2 * i) + 1] = 0;
    } else {
      var[2 * i] = 0;
      var[(2 * i) + 1] = 1;
    }
  }
  for (int i = 1; i <= n; i++)
    if (var[2 * i]) ans.push_back(i);
  cout << ans.size() << '\n';
  for (auto w : ans) cout << w << ' ';
  return 0;
}
