#include <bits/stdc++.h>
using namespace std;
bool vis[555][555][2];
int n, e;
int dis[555][555][2];
int p[555][555][2];
vector<int> adj[555];
void bfs() {
  queue<pair<pair<int, int>, bool> > qu;
  qu.push(make_pair(make_pair(0, n - 1), false));
  vis[0][n - 1][0] = true;
  while (!qu.empty()) {
    if (vis[n - 1][0][0]) break;
    int a = qu.front().first.first;
    int b = qu.front().first.second;
    bool mv = qu.front().second;
    if (mv) {
      for (int i = 0; i < adj[b].size(); i++) {
        int bb = adj[b][i];
        if (a != bb && !vis[a][bb][!mv]) {
          vis[a][bb][!mv] = true;
          dis[a][bb][!mv] = dis[a][b][mv] + 1;
          p[a][bb][!mv] = b;
          qu.push(make_pair(make_pair(a, bb), !mv));
        }
      }
    }
    if (!mv) {
      for (int i = 0; i < adj[a].size(); i++) {
        int aa = adj[a][i];
        if (!vis[aa][b][!mv]) {
          vis[aa][b][!mv] = true;
          dis[aa][b][!mv] = dis[a][b][mv] + 1;
          p[aa][b][!mv] = a;
          qu.push(make_pair(make_pair(aa, b), !mv));
        }
      }
    }
    qu.pop();
  }
}
int main() {
  scanf("%d%d", &n, &e);
  for (int i = 1; i <= e; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--;
    b--;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  bfs();
  if (!vis[n - 1][0][0]) {
    puts("-1");
    return 0;
  }
  int a = n - 1, b = 0, mv = 0;
  vector<int> ans1, ans2;
  ans1.push_back(a);
  ans2.push_back(b);
  while (a != 0 || b != (n - 1) || mv != 0) {
    if (!mv) {
      ans2.push_back(p[a][b][mv]);
      b = p[a][b][mv];
    } else {
      ans1.push_back(p[a][b][mv]);
      a = p[a][b][mv];
    }
    mv = !mv;
  }
  printf("%u\n", ans1.size() - 1u);
  for (int i = ans1.size() - 1; i >= 0; i--) printf("%d ", ans1[i] + 1);
  printf("\n");
  for (int i = ans2.size() - 1; i >= 0; i--) printf("%d ", ans2[i] + 1);
  printf("\n");
  return 0;
}
