#include <bits/stdc++.h>
using namespace std;
vector<int> v[200010];
int fg;
int k1, k2;
int ans1[200010], ans2[200010];
int id[200010];
void dfs(int u, int k, int fa) {
  id[u] = k;
  if (k == 0) {
    k1++;
    ans1[k1] = u;
  } else {
    k2++;
    ans2[k2] = u;
  }
  int si = v[u].size();
  for (int i = 0; i < si; i++) {
    int vv = v[u][i];
    if (vv != fa && id[vv] == -1) {
      dfs(vv, k ^ 1, u);
    }
    if (vv != fa && id[vv] != -1) {
      if (id[vv] == id[u]) fg = 0;
    }
  }
}
int num[200010];
int main() {
  int n, m;
  while (scanf("%d%d", &n, &m) == 2) {
    memset(id, -1, sizeof(id));
    memset(num, 0, sizeof(num));
    fg = 1;
    k1 = 0, k2 = 0;
    for (int i = 1; i <= m; i++) {
      int x, y;
      scanf("%d%d", &x, &y);
      v[x].push_back(y);
      v[y].push_back(x);
      num[x]++;
      num[y]++;
    }
    for (int i = 1; i <= n; i++) {
      if (num[i] == 0) continue;
      if (id[i] == -1) dfs(i, 0, -1);
    }
    if (!fg)
      puts("-1");
    else {
      printf("%d\n", k1);
      for (int i = 1; i <= k1; i++) printf("%d ", ans1[i]);
      puts("");
      printf("%d\n", k2);
      for (int i = 1; i <= k2; i++) printf("%d ", ans2[i]);
      puts("");
    }
  }
  return 0;
}
