#include <bits/stdc++.h>
using namespace std;
bitset<100003> viz;
bitset<100003> viz2;
vector<int> ch[100003];
vector<int> cp[100003];
vector<int> st[2];
void dfs(int nod, int crr) {
  if (viz[nod]) return;
  viz[nod] = 1;
  st[crr].push_back(nod);
  int T = (crr + 1) % 2;
  for (int i = 0; i < ch[nod].size(); i++) dfs(ch[nod][i], T);
}
int main() {
  cin.sync_with_stdio(false);
  cout.sync_with_stdio(false);
  int n, m, x, y;
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    cin >> x >> y;
    ch[x].push_back(y);
    ch[y].push_back(x);
    cp[x].push_back(i);
    cp[y].push_back(i);
  }
  for (int i = 1; i <= n; i++) {
    if (viz[i]) continue;
    dfs(i, 0);
  }
  for (int i = 0; i < st[0].size(); i++) {
    for (int j = 0; j < cp[st[0][i]].size(); j++) {
      viz2[cp[st[0][i]][j]] = 1;
    }
  }
  for (int i = 1; i <= m; i++) {
    if (!viz2[i]) {
      cout << "-1";
      return 0;
    }
    viz2[i] = 0;
  }
  for (int i = 0; i < st[1].size(); i++) {
    for (int j = 0; j < cp[st[1][i]].size(); j++) {
      viz2[cp[st[1][i]][j]] = 1;
    }
  }
  for (int i = 1; i <= m; i++) {
    if (!viz2[i]) {
      cout << "-1";
      return 0;
    }
  }
  cout << st[0].size() << "\n";
  for (int i = 0; i < st[0].size(); i++) cout << st[0][i] << ' ';
  cout << '\n' << st[1].size() << '\n';
  for (int i = 0; i < st[1].size(); i++) cout << st[1][i] << ' ';
  return 0;
}
