#include <bits/stdc++.h>
const int mod = 1e9 + 7;
int mul(int x, int y) { return 1LL * x * y % mod; }
int qpow(int x, int y) {
  int res = 1;
  while (y) {
    if (y & 1) res = mul(res, x);
    y >>= 1;
    x = mul(x, x);
  }
  return res;
}
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
using namespace std;
const int maxn = 1e5 + 500;
int n, m, co[maxn];
vector<int> G[maxn];
bool dfs(int x) {
  for (auto v : G[x]) {
    if (co[v] == -1) {
      co[v] = co[x] ^ 1;
      if (!dfs(v)) return false;
    } else if (co[v] == co[x])
      return false;
  }
  return true;
}
int main(int argc, char *argv[]) {
  n = read(), m = read();
  memset(co, -1, sizeof(co));
  for (int(i) = (1); (i) <= (m); ++(i)) {
    int u = read(), v = read();
    G[u].push_back(v);
    G[v].push_back(u);
  }
  for (int(i) = (1); (i) <= (n); ++(i))
    if (co[i] == -1) {
      co[i] = 0;
      if (!dfs(i)) {
        printf("-1\n");
        return 0;
      }
    }
  vector<int> A, B;
  for (int(i) = (1); (i) <= (n); ++(i))
    if (co[i] == 0)
      A.push_back(i);
    else
      B.push_back(i);
  printf("%d\n", A.size());
  for (auto it : A) printf("%d ", it);
  printf("\n");
  printf("%d\n", B.size());
  for (auto it : B) printf("%d ", it);
  printf("\n");
  return 0;
}
