#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int>ans;
vector<int>parent;
void path(int node,int start)
{
ans.push_back(node);
if(node==start)return;
path(parent[node],start);
}
int main() {
cin>>n>>m;
int flag=0;
parent.resize(n+1);
parent[0]=1;
deque<pair<int,int>>Q;
vector<vector<int>>arr(m,vector<int>(2));
vector<vector<int>>adj(n+1);
vector<int>visit(n+1,0);
for(int i=0;i<m;i++)
{
cin>>arr[i][0]>>arr[i][1];
}
for(int i=0;i<m;i++)
{
adj[arr[i][1]].push_back(arr[i][0]);
adj[arr[i][0]].push_back(arr[i][1]);
}
Q.push_back({1,0});
while(Q.size())
{
int node=Q.front().first;
int time=Q.front().second;
visit[node]=true;
Q.pop_front();
//cout<<node<<" "<<time<<endl;
if(node==n)
{
path(node,1);
reverse(ans.begin(),ans.end());
cout<<ans.size()<<endl;
for(auto x: ans)cout<<x<<" ";
flag=1; break;
}
for(auto x: adj[node])
{
if(!visit[x])
{
Q.push_back({x,time+1});
visit[x]=true;
parent[x]=node;
}
}
}
if(!flag)cout<<"IMPOSSIBLE";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBuLG07CnZlY3RvcjxpbnQ+YW5zOwp2ZWN0b3I8aW50PnBhcmVudDsKCnZvaWQgcGF0aChpbnQgbm9kZSxpbnQgc3RhcnQpCnsKCQoJYW5zLnB1c2hfYmFjayhub2RlKTsKCWlmKG5vZGU9PXN0YXJ0KXJldHVybjsKCXBhdGgocGFyZW50W25vZGVdLHN0YXJ0KTsKfQoKaW50IG1haW4oKSB7CgkKY2luPj5uPj5tOwppbnQgZmxhZz0wOwoKcGFyZW50LnJlc2l6ZShuKzEpOwpwYXJlbnRbMF09MTsKCmRlcXVlPHBhaXI8aW50LGludD4+UTsKCnZlY3Rvcjx2ZWN0b3I8aW50Pj5hcnIobSx2ZWN0b3I8aW50PigyKSk7CnZlY3Rvcjx2ZWN0b3I8aW50Pj5hZGoobisxKTsKdmVjdG9yPGludD52aXNpdChuKzEsMCk7Cgpmb3IoaW50IGk9MDtpPG07aSsrKQp7CgljaW4+PmFycltpXVswXT4+YXJyW2ldWzFdOwp9Cgpmb3IoaW50IGk9MDtpPG07aSsrKQp7CglhZGpbYXJyW2ldWzFdXS5wdXNoX2JhY2soYXJyW2ldWzBdKTsKCWFkalthcnJbaV1bMF1dLnB1c2hfYmFjayhhcnJbaV1bMV0pOwp9CgpRLnB1c2hfYmFjayh7MSwwfSk7Cgp3aGlsZShRLnNpemUoKSkKewoJaW50IG5vZGU9US5mcm9udCgpLmZpcnN0OwoJaW50IHRpbWU9US5mcm9udCgpLnNlY29uZDsKCXZpc2l0W25vZGVdPXRydWU7CglRLnBvcF9mcm9udCgpOwoJCgkvL2NvdXQ8PG5vZGU8PCIgIjw8dGltZTw8ZW5kbDsKCWlmKG5vZGU9PW4pCgl7CgkJcGF0aChub2RlLDEpOwoJCXJldmVyc2UoYW5zLmJlZ2luKCksYW5zLmVuZCgpKTsKCQljb3V0PDxhbnMuc2l6ZSgpPDxlbmRsOwoJCWZvcihhdXRvIHg6IGFucyljb3V0PDx4PDwiICI7CgkJZmxhZz0xOyBicmVhazsKCX0KCQoJZm9yKGF1dG8geDogYWRqW25vZGVdKQoJewoJCWlmKCF2aXNpdFt4XSkKCQl7CgkJCVEucHVzaF9iYWNrKHt4LHRpbWUrMX0pOwoJCQl2aXNpdFt4XT10cnVlOwoJCQlwYXJlbnRbeF09bm9kZTsKCQl9Cgl9Cn0KCmlmKCFmbGFnKWNvdXQ8PCJJTVBPU1NJQkxFIjsKfQ==