CSES - Shared codeLink to this code: https://cses.fi/paste/3719bdc61c805cb029b40b/
//#pragma GCC optimize("ZERO3")
//#pragma GCC target("sse4")
#include<bits/stdc++.h>
using namespace std;
 
#define ll long long
#define int long long
#define ld long double
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define setpr(pp) fixed<<setprecision(pp)
#define FOR(I,E,N) for(I=E;I<=N;++I)
#define MS0(x) memset(x,0,sizeof(x))
#define MS1(x) memset(x,-1,sizeof(x))
#define IOS ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define mod %1000000007
#define pi 3.141592653
#define MX 1000000007
vector<bool> vis(100005,0);
vector<int> d(100005,0);
vector<int> r(100005,-1);
vector<int> adj[100005];
int N;

void dfs(int x)
{
	vis[x]=1;
	if(x==N)
		return;
	for(int i:adj[x])
	{
		if(!vis[i])
			dfs(i);
		if(d[i]>d[x])
		{
			d[x]  = d[i];
			r[x] = i;
		}
	}
	if(d[x]>0)
		d[x]++;
}

int32_t main()
{
	//freopen("paint.in", "r", stdin),freopen("paint.out", "w", stdout);
	//IOS;
	ll n,m,x,y;
	cin>>n>>m;
	for(int i=0;i<m;++i)
	{
		cin>>x>>y;
		adj[x].pb(y);
	}
	N=n;
	d[n]=1;
	dfs(1);
	if(!d[1])
		cout<<"IMPOSSIBLE";
	else
	{
		cout<<d[1]<<"\n";
		int i=1;
		while(i!=-1)
		{
			cout<<i<<" ";
			i = r[i];
		}
	}
}