#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > v(100001);
vector<int> vis(100001);
vector<int> lvl(100001);
vector<int> col(100001);
vector<int> col1, col2;
int bfs(int s) {
  queue<int> q;
  q.push(s);
  lvl[s] = 0;
  col[s] = 0;
  vis[s] = 1;
  int f = 0;
  if (v[s].size() == 0) return 0;
  while (!q.empty()) {
    int p = q.front();
    q.pop();
    if (col[p] == 1)
      col1.push_back(p);
    else if (col[p] == 0)
      col2.push_back(p);
    for (int i = 0; i < v[p].size(); i++) {
      if (col[v[p][i]] == -1) {
        col[v[p][i]] = !col[p];
        lvl[v[p][i]] = lvl[p] + 1;
        q.push(v[p][i]);
      } else {
        if (col[v[p][i]] == col[p]) f = 1;
      }
    }
  }
  if (f == 1) return -1;
  return 1;
}
int main() {
  int n, m;
  cin >> n >> m;
  fill(vis.begin(), vis.end(), 0);
  fill(col.begin(), col.end(), -1);
  fill(lvl.begin(), lvl.end(), 0);
  for (int i = 0; i < v.size(); i++) v[i].clear();
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  int x = 1;
  for (int i = 1; i <= n; i++) {
    int a;
    if (col[i] == -1) a = bfs(i);
    if (a == -1) {
      x = 0;
      break;
    }
  }
  if (x == 0)
    cout << -1;
  else {
    cout << col1.size() << endl;
    for (int i = 0; i < col1.size(); i++) cout << col1[i] << " ";
    cout << endl;
    cout << col2.size() << endl;
    for (int i = 0; i < col2.size(); i++) cout << col2[i] << " ";
    cout << endl;
  }
}
