← Home
#include<bits/stdc++.h>
#define N 300005
using namespace std;
int n,m,dis[N],lst[N],vis[N];
vector<int>e[N];
queue<int>q;
int main(){
	//ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;++i){
		int u,v;cin>>u>>v;
		e[u].push_back(v);e[v].push_back(u);
	}
	memset(dis,0x3f,sizeof(dis));
	q.push(1);dis[1]=0;
	while(!q.empty()){
		int u=q.front();q.pop();
		for(int v:e[u]){
			if(dis[v]>dis[u]+1){
				dis[v]=dis[u]+1;lst[v]=u;
				q.push(v);
			}
		}
	}
	if(dis[n]<=3){
		vector<int>rr;
		for(int i=n;i;i=lst[i])rr.push_back(i);
		reverse(rr.begin(),rr.end());
		cout<<dis[n]<<'\n';
		for(int x:rr)cout<<x<<" ";return 0;
	}
	for(int x:e[1])vis[x]=1;
	for(int x:e[1]){
		for(int y:e[x]){
			if(!vis[y]&&y!=1){
				cout<<"4\n"<<"1 "<<x<<" "<<y<<" "<<1<<" "<<n<<'\n';return 0;
			}
		}
	}
	memset(vis,0,sizeof(vis));
	for(int x:e[1]){
		for(int y:e[x])vis[y]=x; 
		for(int y:e[x]){
			if(y==1)continue;
			for(int z:e[y]){
				if(z==x)continue;
				if(vis[z]!=x){
					cout<<"5\n"<<"1 "<<x<<" "<<y<<" "<<z<<" "<<x<<" "<<n<<'\n';
					return 0;
				}
			}
		}
	}
	cout<<-1;
	return 0;
}