/*
  Copyright 2011 Marek "p2004a" Rusinowski
  Finding Hamilton cycle
*/
#include <cstdio>
#include <vector>
#include <stack>

#define MAXN 1000

std::vector<int> edges[MAXN];
std::stack<int> cycle;
bool visited[MAXN];
int n, m;

bool dfs(int v) {
  visited[v] = true;
  cycle.push(v);
  for (unsigned i = 0; i < edges[v].size(); ++i) {
    if (edges[v][i] == 0 && (int)cycle.size() == n) {
      return true;
    }
    if (!visited[edges[v][i]]) {
      if (dfs(edges[v][i])) {
        return true;
      }
    }
  }
  visited[v] = false;
  cycle.pop();
  return false;
}

int main() {
  int a, b;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < m; ++i) {
    scanf("%d %d", &a, &b);
    edges[--a].push_back(--b);
    edges[b].push_back(a);
  }
  if (dfs(0)) {
    while (!cycle.empty()) {
      printf("%d ", cycle.top() + 1);
      cycle.pop();
    }
    printf("\n");
  } else {
    printf("false\n");
  }
  return 0;
}
