#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e2;
pair<pair<int, int>, bool> pr[maxn][maxn][2];
queue<pair<pair<int, int>, bool> > q;
vector<int> neighbor[maxn];
void bfs(int s, int t) {
  for (int i = 0; i < maxn; i++)
    for (int j = 0; j < maxn; j++)
      for (int k = 0; k < 2; k++)
        pr[i][j][k] = make_pair(make_pair(-1, -1), false);
  q.push(make_pair(make_pair(s, t), 0));
  while (!q.empty()) {
    int v = q.front().first.second, u = q.front().first.first;
    bool b = q.front().second;
    q.pop();
    if (!b) {
      for (int i = 0; i < neighbor[u].size(); i++)
        if (pr[neighbor[u][i]][v][!b].first.first == -1) {
          pr[neighbor[u][i]][v][!b] = make_pair(make_pair(u, v), b);
          q.push(make_pair(make_pair(neighbor[u][i], v), !b));
        }
    } else {
      for (int i = 0; i < neighbor[v].size(); i++)
        if (pr[u][neighbor[v][i]][!b].first.first == -1 &&
            neighbor[v][i] != u && (u != s || neighbor[v][i] != t)) {
          pr[u][neighbor[v][i]][!b] = make_pair(make_pair(u, v), b);
          q.push(make_pair(make_pair(u, neighbor[v][i]), !b));
        }
    }
  }
}
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    neighbor[u - 1].push_back(v - 1);
    neighbor[v - 1].push_back(u - 1);
  }
  bfs(0, n - 1);
  if (pr[n - 1][0][0].first.first == -1)
    cout << -1;
  else {
    vector<int> fi, se;
    pair<pair<int, int>, bool> kl = make_pair(make_pair(n - 1, 0), 0);
    while (kl.first.first != -1) {
      if (kl.second)
        se.push_back(kl.first.second);
      else
        fi.push_back(kl.first.first);
      kl = pr[kl.first.first][kl.first.second][kl.second];
    }
    cout << fi.size() - 1 << endl;
    for (int i = fi.size() - 1; i > -1; i--) cout << fi[i] + 1 << " ";
    cout << endl;
    for (int i = se.size() - 1; i > -1; i--) cout << se[i] + 1 << " ";
    cout << 1;
  }
}
