#include <bits/stdc++.h>
using namespace std;
 
#define int long long int
#define vi vector<int>
#define vvi vector<vi>
#define read(a)  for(int i = 0; i < n; i++) cin >> a[i];
#define print(a)  for(int i = 0; i < n; i++) cout << a[i] << " ";
#define pb push_back
#define pql priority_queue<int>
#define pqs priority_queue<int, vi, greater<int>>
#define pqlv priority_queue<vi>
#define pqsv priority_queue<vi, vvi, greater<vi>>
#define endl '\n'
#define N 1234567
#define MOD 1000000007

vvi adj;
vi par, vis;
int n, mx;

bool dfs(int u, int d = 0) {
    if(u == n) {
        if(d > mx) {
            mx = d;
            return true;
        }
        return false;
    }
    if(vis[u])
        return false;
    vis[u] = 1;
    bool ans = false;
    for(int v : adj[u]) {
        if(dfs(v, d + 1)) {
            par[v] = u;
            ans = true;
        }
    }
    return ans;
}

signed main() {
    ios::sync_with_stdio(false); 
    cin.tie(0); 
    cout.tie(0);
    int t = 1;
    // cin >> t;
    while(t--) {
        int m;
        cin >> n >> m;
        adj.clear();
        adj.resize(n + 1);
        mx = 0;
        par.assign(n + 1, -1);
        vis.assign(n + 1, 0);
        for(int i = 0; i < m; i++) {
            int a, b;
            cin >> a >> b;
            adj[a].pb(b);
        }
        if(dfs(1, 0)) {
            int v = n;
            cout << mx + 1 << endl;
            vi ret;
            while(v != 1) {
                ret.pb(v);
                v = par[v];
            }
            ret.pb(1);
            reverse(ret.begin(), ret.end());
            for(int i : ret)    cout << i << " ";
        }
        else {
            cout << "IMPOSSIBLE";
        }
        cout << endl;
    }
	return 0;
}