#include <bits/stdc++.h>
using namespace std;
int n, m, par[2][501][501], ans;
vector<int> adj[501], Ans[2];
queue<int> q;
bool k, vis[2][501][501];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  q.push(0);
  q.push(1);
  q.push(n);
  q.push(0);
  vis[0][1][n] = 1;
  while (!q.empty()) {
    bool t = q.front();
    q.pop();
    int x = q.front();
    q.pop();
    int y = q.front();
    q.pop();
    int C = q.front();
    q.pop();
    if (x == n && y == 1 && t == 0) {
      k = 1;
      ans = C / 2;
      break;
    }
    if (t == 0) {
      for (int i = 0; i < adj[x].size(); i++) {
        int z = adj[x][i];
        if (!vis[1][z][y]) {
          vis[1][z][y] = 1;
          par[1][z][y] = x;
          q.push(1);
          q.push(z);
          q.push(y);
          q.push(C + 1);
        }
      }
    } else {
      for (int i = 0; i < adj[y].size(); i++) {
        int z = adj[y][i];
        if (!vis[0][x][z] && z != x) {
          vis[0][x][z] = 1;
          par[0][x][z] = y;
          q.push(0);
          q.push(x);
          q.push(z);
          q.push(C + 1);
        }
      }
    }
  }
  if (!k) {
    printf("-1");
    return 0;
  }
  printf("%d\n", ans);
  int a = n, b = 1;
  Ans[0].push_back(n);
  Ans[1].push_back(1);
  for (int i = 0; i < ans; i++) {
    b = par[0][a][b];
    Ans[1].push_back(b);
    a = par[1][a][b];
    Ans[0].push_back(a);
  }
  for (int i = Ans[0].size() - 1; i >= 0; i--) printf("%d ", Ans[0][i]);
  printf("\n");
  for (int i = Ans[1].size() - 1; i >= 0; i--) printf("%d ", Ans[1][i]);
}
