#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e2 + 11;
int a, b, n, m, dp[maxn][maxn], t;
pair<int, int> par[maxn][maxn];
vector<int> adg[maxn];
bool mark[maxn][maxn];
queue<pair<int, int> > q;
vector<int> v;
vector<int> v10;
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &a, &b);
    adg[a].push_back(b);
    adg[b].push_back(a);
  }
  q.push(make_pair(1, n));
  mark[1][n] = 1;
  par[1][n] = make_pair(-1, -1);
  pair<int, int> p11;
  while (!q.empty()) {
    p11 = q.front();
    mark[p11.first][p11.second] = 1;
    for (int v1, i = 0; i < adg[p11.first].size(); i++) {
      v1 = adg[p11.first][i];
      for (int u1, j = 0; j < adg[p11.second].size(); j++) {
        u1 = adg[p11.second][j];
        if (!mark[v1][u1] && v1 != u1) {
          q.push(make_pair(v1, u1));
          mark[v1][u1] = 1;
          dp[v1][u1] = dp[p11.first][p11.second] + 1;
          par[v1][u1] = make_pair(p11.first, p11.second);
        }
      }
    }
    q.pop();
  }
  if (dp[n][1] == 0) {
    cout << -1;
    return 0;
  }
  printf("%d", dp[n][1]);
  printf("\n");
  pair<int, int> p10;
  p10 = make_pair(n, 1);
  v.push_back(n);
  v10.push_back(1);
  while (par[p10.first][p10.second].first != -1) {
    p10 = par[p10.first][p10.second];
    v.push_back(p10.first);
    v10.push_back(p10.second);
  }
  for (int i = v.size() - 1; i >= 0; i--) {
    printf("%d ", v[i]);
  }
  printf("\n");
  for (int i = v10.size() - 1; i >= 0; i--) {
    printf("%d ", v10[i]);
  }
  return 0;
}
