func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 500 + 4;   const int maxlog = 22;   const int mod = 1e9 + 7;   const int sq = 350;   int n, m;   int ans[maxn][maxn][2];   pair<int, int> par[maxn][maxn][2];   queue<pair<pair<int, int>, bool> > q;   vector<int> edge[maxn];   void solve() {     while (!q.empty()) {       int u = q.front().first.first;       int v = q.front().first.second;       bool b = q.front().second;       q.pop();       if (b == 0) {         for (int i = 0; i < edge[u].size(); i++) {           int k = edge[u][i];           if (!ans[k][v][1]) {             par[k][v][1] = make_pair(u, v);             ans[k][v][1] = ans[u][v][0] + 1;             q.push(make_pair(make_pair(k, v), 1));           }         }       } else {         for (int i = 0; i < edge[v].size(); i++) {           int k = edge[v][i];           if (!ans[u][k][0] && k != u) {             par[u][k][0] = make_pair(u, v);             ans[u][k][0] = ans[u][v][1] + 1;             q.push(make_pair(make_pair(u, k), 0));           }         }       }     }   }   vector<pair<int, int> > res;   void print(int x, int y, bool b) {     if (x == 0 && y == 0) return;     res.push_back(make_pair(x, y));     print(par[x][y][b].first, par[x][y][b].second, b ^ 1);   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     cout.precision(20);     cin >> n >> m;     for (int i = 0; i < m; i++) {       int u, v;       cin >> u >> v;       edge[u].push_back(v), edge[v].push_back(u);     }     ans[1][n][0] = 1;     q.push(make_pair(make_pair(1, n), 0));     solve();     if (ans[n][1][0] / 2 == 0) {       cout << -1;       return 0;     }     cout << ans[n][1][0] / 2 << endl;     print(n, 1, 0);     reverse(res.begin(), res.end());     for (int i = 0; i < res.size(); i += 2) cout << res[i].first <<    ;     cout << endl;     for (int i = 0; i < res.size(); i += 2) cout << res[i].second <<    ;     return 0;   }   