CSES - Shared codeLink to this code: https://cses.fi/paste/f9d630a9cb939713531048/
#include <bits/stdc++.h>
using namespace std;
#define E 1e-9
#define PI 3.141592653589793238462
#define F first
#define S second
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define INF 1e18
#define MOD 1000000007
#define SZ(a) int((a).size())
#define setbits(a) (__builtin_popcountll(a))
#define right(a) (__builtin_ctzll(a))
#define left(a) (__builtin_clzll(a))
#define parity(a) (__builtin_parityll(a))
#define msb(a) (__lg(a))
#define lsb(a) ((ll)(log2(a & -a)))
typedef std::numeric_limits<double> dbl;
typedef long long ll;
#define REP(i, a, b) for (ll i = a; i < b; i++)
typedef vector<ll> vi;
typedef pair<ll, ll> pi;
typedef pair<ll, pi> pii;

#define MAXV 1e6

vector<ll> Parent(MAXV), Rank(MAXV);

void Init(ll n)
{
    REP(i, 1, n + 1)
    {
        Parent[i] = i;
        Rank[i] = 1;
    }
}
void Root(ll x, vi &res)
{
    if (Parent[x] != x)
        Root(Parent[x], res);
    res.PB(x);
    return;
}

void dfs(ll src, stack<ll> &st, vector<vector<ll>> &adj, vector<bool> &visited)
{
    visited[src] = true;
    for (auto &x : adj[src])
    {
        if (!visited[x])
            dfs(x, st, adj, visited);
    }
    st.push(src);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    ll n, m;
    cin >> n >> m;
    vector<vector<ll>> adj(n + 1);
    for (ll i = 0; i < m; i++)
    {
        ll a, b;
        cin >> a >> b;
        adj[a].push_back(b);
    }
    stack<ll> st;
    vector<bool> visited(n + 1, false);
    dfs(1, st, adj, visited);
    vector<ll> dp(n + 1, -1);
    Init(n);
    dp[1] = dp[0] = 0;
    while (!st.empty())
    {
        for (auto &x : adj[st.top()])
        {
            if (dp[x] < 1 + dp[st.top()])
            {
                dp[x] = 1 + dp[st.top()];
                Parent[x] = st.top();
            }
        }
        st.pop();
    }
    if (dp[n] == -1)
        cout << "IMPOSSIBLE\n";
    else
    {
        vi res;
        Root(n, res);
        cout << SZ(res) << '\n';
        for (auto &x : res)
            cout << x << " ";
        cout << '\n';
    }
    return 0;
}