#include <cstddef>
#include <iostream>
#include <vector>
using namespace std;
int len;//-------指向最后一位的索引
struct node{
  int n;
  node* next;
  node(){n = 0; next = nullptr;}
  node(int x){n = x; next = nullptr;}
  node(int x, node* p){n = x; next = p;}
};
int main() {
  int n, h;
  cin >> n >> h;
  vector<node> vec((int)1e3 + 10, node(0));//--------注意要提前开好大小,不能用push_back往里面加因为vector扩容(开一个更大的空间,把原数组复制过去)指针会偏移
  auto change = [&](int x, int y) -> node*{//-------令x的指针指向y,并返回y的指针
    for (int i = 0; i <= len; i++){
      if (vec[i].n == x){
        node* temp = vec[i].next;
        vec[i].next = &vec[len];
        return temp;
      }
    }
    return nullptr;//--------虽然上面的return一定会有返回值但是如果这里不返回的话,编译无法通过
  };
  vec[0].n = h;
  int a, b;
  len = 0;//len is -> now
  for (int i = 0; i < n - 1; i++){
    cin >> a >> b;
    len++;
    vec[len].n = a;
    vec[len].next = change(b, a);
  }
  node* i = &vec[0];
  int x;
  cin >> x;
  while (i != nullptr){
    if (i->n != x)//------跳过被删除的数
      cout << i->n << " ";
    i = i->next;
  }
  return 0;
}
// 64 位输出请用 printf("%lld")