#include <iostream>
#include <vector>
using namespace std;

vector<int> ans;
void DFS(int cur, int par, vector<int> &vis, vector<vector<int>> &adjList) {
	if(vis[cur] == 1) return;
	if(vis[cur] == 2) {
		ans.push_back(cur);
		return;
	}
	vis[cur] = 2;
	for(auto &nx: adjList[cur]) {
		if(nx != par) {
			DFS(nx, cur, vis, adjList);
			if(ans.size() > 0) {
				if(cur == ans.front()) ans.push_back(-1);
				else if(ans.back() == nx) ans.push_back(cur);
				return;
			}
		}
	}
	vis[cur] = 1;
	return;
}
int main() {
	cin.tie(0);
	ios_base::sync_with_stdio(0);
	int n, m;
	cin >> n >> m;
	vector<vector<int>> adjList(n);
	vector<int> vis(n);
	for(int i = 0; i < m; i++) {
		int u, v;
		cin >> u >> v;
		u--, v--;
		adjList[u].push_back(v);
		adjList[v].push_back(u);
	}
	
	for(int i = 0; i < n; i++){
		if(!vis[i]){
			DFS(i, -1, vis, adjList);
			if(!ans.empty()) break;
		}
	}
	if(ans.empty()) {
		cout << "IMPOSSIBLE\n";
	} else {
		cout << ans.size() << '\n';
		ans.back() = ans.front();
		for(auto a: ans) {
			cout << a + 1 << ' ';
		}
		cout << '\n';
	}
	return 0;
}