#include <bits/stdc++.h>
using namespace std;
const long double Pi = 3.14159265359;
const long long Mod = 1000 * 1000 * 1000 + 7;
const long long MaxN = 500 + 10;
long long n, m;
pair<int, pair<int, int> > mark[MaxN][MaxN][2];
vector<int> adj[MaxN];
int d[MaxN][MaxN][2];
void BFS() {
  mark[1][n][0].first = 1;
  queue<pair<pair<int, int>, int> > q;
  q.push({{1, n}, 0});
  while (q.size()) {
    pair<pair<int, int>, int> ru = q.front();
    if (ru.second == 0) {
      for (int i = 0; i < adj[ru.first.first].size(); i++) {
        if (!mark[adj[ru.first.first][i]][ru.first.second][1].first) {
          mark[adj[ru.first.first][i]][ru.first.second][1].first = 1;
          q.push({{adj[ru.first.first][i], ru.first.second}, 1});
          d[adj[ru.first.first][i]][ru.first.second][1] =
              1 + d[ru.first.first][ru.first.second][0];
          mark[adj[ru.first.first][i]][ru.first.second][1].second = {
              ru.first.first, ru.first.second};
        }
      }
    } else {
      for (int i = 0; i < adj[ru.first.second].size(); i++) {
        if (!mark[ru.first.first][adj[ru.first.second][i]][0].first &&
            adj[ru.first.second][i] != ru.first.first) {
          mark[ru.first.first][adj[ru.first.second][i]][0].first = 1;
          d[ru.first.first][adj[ru.first.second][i]][0] =
              1 + d[ru.first.first][ru.first.second][1];
          mark[ru.first.first][adj[ru.first.second][i]][0].second = {
              ru.first.first, ru.first.second};
          q.push({{ru.first.first, adj[ru.first.second][i]}, 0});
        }
      }
    }
    q.pop();
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie();
  cout.tie();
  cin >> n >> m;
  long long t, t1;
  for (int i = 0; i < m; i++) {
    cin >> t >> t1;
    adj[t].push_back(t1);
    adj[t1].push_back(t);
  }
  BFS();
  vector<int> Fi;
  vector<int> Se;
  if (mark[n][1][0].first == 0) return cout << -1, 0;
  long long Cnt = d[n][1][0] / 2;
  cout << Cnt << '\n';
  pair<pair<int, int>, int> No;
  No = {{n, 1}, 0};
  while (Fi.size() != Cnt || Se.size() != Cnt + 1) {
    if (No.second == 0) {
      Se.push_back(No.first.second);
      No = {{mark[No.first.first][No.first.second][0].second}, 1};
    } else {
      Fi.push_back(No.first.first);
      No = {{mark[No.first.first][No.first.second][1].second}, 0};
    }
  }
  Fi.push_back(1);
  for (int i = Fi.size() - 1; i >= 0; i--) cout << Fi[i] << ' ';
  cout << '\n';
  for (int i = Se.size() - 1; i >= 0; i--) cout << Se[i] << ' ';
}
