Algorithm: Data Structure
#include < bits/stdc++.h>
using namespace std ;
// #include<ext/pb_ds/assoc_container.hpp>
// #include<ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
// typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds; // find_by_order, order_of_key
#define ll long long
#define vi vector<int >
#define pii pair<int , int >
#define pll pair<ll, ll>
#define vvi vector<vi>
#define vll vector<ll>
#define vvll vector<vector<ll>>
#define vpii vector<pair<int ,int >>
#define vpll vector<pair<ll,ll>>
#define vb vector<bool >
#define vs vector<string>
// /............x...........///
#define all (a ) a.begin(), a.end()
#define allr (a ) a.rbegin(), a.rend()
#define mp (a, b ) make_pair(a, b)
#define pb push_back
#define ff first
#define ss second
#define bg begin ()
#define UNIQUE (X ) (X).erase(unique(all(X)), (X).end())
#define ft cout << " for test" <<endl;
#define read (v, a, n ) for (int i = a; i<n; i++)cin>>v[i];
#define print (v ) for (auto it : v)cout << it<<" " ;cout << endl;
#define PI acos (-1.0 )
#define yes cout <<" Yes" << endl
#define no cout<<" No" <<endl
#define FIO ios_base::sync_with_stdio (0 );cin.tie(0 );cout.tie(0 );
#define t_c int test, cs = 1 ;cin>>test;while (test--)
#define casep cout<<" Case " << cs++<<" : " ;
// /................function.....................///
#define D (a ) (double )(a)
#define siz (s ) (int )(s.size())
#define max3 (a, b, c ) max(a, max(b, c))
#define min3 (a, b, c ) min(a, min(b, c))
#define Min (a ) *min_element (all(a))
// /#define mod 1000000007
// /.........Graph.........///
int X[] = {1 , -1 , 0 , 0 };
int Y[] = {0 , 0 , 1 , -1 };
// /........constant........///
const ll N = 1e6 +5 ;
void file (){
freopen (" input.txt" ," r" ,stdin);
freopen (" output.txt" ," w" ,stdout);
}
#define inf (1ll <<62 )
vvi adj;
vi parent,dis,in;
int n;
void bfs (queue<int >& q, bool type=0 ){
while (!q.empty ()){
int u = q.front (); q.pop ();
if (!type and u==1 )continue ;
// cout<<"u "<<u<<endl;
for (auto x:adj[u]){
in[x]--;
if (in[x]==0 ){
parent[x]=u;
q.push (x);
}
}
}
}
int main (){
FIO;
// file();
int m,i,j;
cin>>n>>m;
adj.resize (n+1 );
dis.resize (n+1 );
in.resize (n+1 );
parent.resize (n+1 );
for (i=0 ; i<m; i++){
int a,b;
cin>>a>>b;
adj[a].pb (b);
in[b]++;
}
queue<int >q;
for (i=2 ; i<=n; i++){
if (in[i]==0 )q.push (i);
}
bfs (q);
// cout<<endl<<"done"<<endl;
q.push (1 );
bfs (q,1 );
vi ans;
int p = n;
while (true ){
ans.pb (p);
if (p<=1 )break ;
p = parent[p];
}
reverse (all (ans));
if (ans.front ()==1 and ans.back ()==n){
cout<<ans.size ()<<endl;
print (ans);
}
else cout<<" IMPOSSIBLE" <<endl;
}