#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define mp make_pair
#define pb push_back
#define F first
#define S second
const int N=1000005;
#define M 1000000007
#define double long double
#define BINF 1000000000001
#define init(arr,val) memset(arr,val,sizeof(arr))
#define MAXN 15000001
const int LG = 22;
stack<int>s;
vector<int>v[N];
bool vis[N];
int print(){
vector<int>val;
int x = s.top();
s.pop();
val.pb(x);
while(1){
int y = s.top();
s.pop();
val.pb(y);
if(y == x)
break;
}
cout << val.size() << endl;
for(auto i : val)
cout << i << ' ';
exit(0);
}
void dfs(int u, int p){
vis[u] = 1;
s.push(u);
for(auto i : v[u]){
if(i != p and !vis[i])
dfs(i,u);
else if(i != p and vis[i]){
s.push(i);
print();
}
}
s.pop();
}
#undef int
int main() {
#define int long long int
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,m;
cin >> n >> m;
for(int i = 0; i < m; i++){
int x,y;
cin >> x >> y;
v[x].pb(y);
v[y].pb(x);
}
for(int i = 1; i <= n; i++){
if(!vis[i]){
while(s.size())
s.pop();
dfs(i,0);
}
}
cout << "IMPOSSIBLE\n";
return 0;
}