/*
TASK:platka
LANG:C++
*/

#include<stdio.h>
#include<stdlib.h>
#include<stack>

char adj[2048][2048];
int n, m;

std::stack<int> tmp, res;
void oiler() {
	while(tmp.size()) {
		int cur = tmp.top(), has_neigh = 0;
		for(int i = 1; i <= n; i++) {
			if(adj[cur][i]) {
				tmp.push(i);
				adj[cur][i] = 0;
				adj[i][cur] = 0;
				has_neigh = 1;
				break;
			}
		}
		if(!has_neigh) {
			tmp.pop();
			res.push(cur);
		}
	}
}

int stepen(int i) {
	int step = 0;
	for(int j = 1; j <= n; j++) {
		if(adj[i][j]) {
			step++;
		}
	}
	return step;
}

int main() {
	freopen("platka.in", "r", stdin);
	scanf("%i %i", &n, &m);
	for(int i = 0; i < m; i++) {
		int k, l;
		scanf("%i%i", &k, &l);
		adj[k][l] = 1;
		adj[l][k] = 1;
	}
	int nech = 0;
	for(int i = 1; i <= n; i++) {
		int stp = stepen(i);
		if(stp % 2 == 1) {
			if(!tmp.size()) {
				tmp.push(i);
			}
			nech++;
		}
		//
	}
	if(nech != 0 && nech != 2) {
		printf("Sorry, Pesho %i\n", abs(nech-2));
		return 0;
	}
	if(!tmp.size()) tmp.push(1);
	oiler();
	if(res.size() != n) {
		printf("Sorry, Pesho %i\n", abs(n-res.size()));
		return 0;
	}
	int pp = 0;
	while(res.size()) {
		if(pp) printf(" ");
		pp = 1;
		printf("%i", res.top());
		res.pop();
	}
	return 0;
}
