#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  while (!isdigit(c)) c = getchar();
  while (isdigit(c)) {
    x = x * 10 + c - '0';
    c = getchar();
  }
}
int fr[100005], to[100005 << 1], ne[100005 << 1], x[100005];
int a[100005], b[100005], l, r;
int n, m;
int flag;
int c, d, e;
inline void dfs(int w) {
  for (int u = fr[w]; u; u = ne[u])
    if (!x[to[u]]) {
      x[to[u]] = 3 - x[w];
      dfs(to[u]);
    } else if (x[w] == x[to[u]])
      flag = 1;
}
int main() {
  read(n);
  read(m);
  for (int i = 1; i <= m; ++i) {
    read(c);
    read(d);
    to[++e] = d;
    ne[e] = fr[c];
    fr[c] = e;
    to[++e] = c;
    ne[e] = fr[d];
    fr[d] = e;
  }
  flag = 0;
  for (int i = 1; i <= n; ++i)
    if (!x[i]) {
      x[i] = 1;
      dfs(i);
    }
  if (flag)
    printf("-1\n");
  else {
    for (int i = 1; i <= n; ++i)
      if (x[i] == 1)
        a[++l] = i;
      else
        b[++r] = i;
    printf("%d\n", l);
    for (int i = 1; i <= l; ++i) printf("%d%c", a[i], i < l ? ' ' : '\n');
    printf("%d\n", r);
    for (int i = 1; i <= r; ++i) printf("%d%c", b[i], i < r ? ' ' : '\n');
  }
  return 0;
}
