#include <bits/stdc++.h>
using namespace std;
long long n, m, x[200005], y[200005];
vector<long long> dsk[200005];
long long gd[200005], kt, xh[200005];
void input() {
  cin >> n >> m;
  for (long long i = 1; i <= n; i++) dsk[i].clear();
  for (long long i = 1; i <= m; i++) {
    cin >> x[i] >> y[i];
    dsk[x[i]].push_back(y[i]);
    dsk[y[i]].push_back(x[i]);
  }
}
void dfs(long long u) {
  xh[u] = 1;
  for (long long j = 0; j < dsk[u].size(); j++) {
    long long v = dsk[u][j];
    if (xh[v] == 0) {
      gd[v] = 1 - gd[u];
    }
    if (xh[v] == 1 && gd[v] == gd[u]) {
      kt = 0;
      return;
    } else if (xh[v]) {
      continue;
    }
    dfs(v);
  }
}
void output() {
  if (kt == 0)
    cout << "-1";
  else {
    long long d1 = 0, d2 = 0;
    for (long long i = 1; i <= n; i++) {
      if (gd[i] == 0) d1++;
    }
    cout << d1 << endl;
    for (long long i = 1; i <= n; i++) {
      if (gd[i] == 0) cout << i << " ";
    }
    cout << endl;
    for (long long i = 1; i <= n; i++) {
      if (gd[i] == 1) d2++;
    }
    cout << d2 << endl;
    for (long long i = 1; i <= n; i++) {
      if (gd[i] == 1) cout << i << " ";
    }
  }
}
void solve() {
  kt = 1;
  for (long long i = 1; i <= n; i++) {
    gd[i] = -1;
    xh[i] = 0;
  }
  for (long long i = 1; i <= n; i++) {
    if (xh[i] == 0) gd[i] = 1;
    dfs(i);
    if (!kt) {
      return;
    }
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  input();
  solve();
  output();
}
