#include <bits/stdc++.h>
using namespace std;
struct TreeNode{
	int val;
	TreeNode* right;
	TreeNode* left;
	TreeNode(int val):left(nullptr),right(nullptr),val(val){};
};

vector<int>top(TreeNode* root){
  vector<int>ans;
  if(root == nullptr)return ans;
   map<int,int>mp;
  queue<pair<TreeNode*,int>>q;
  q.push({root,0});
  
  while(!q.empty()){
  	auto [u,v]= q.front();
  	q.pop();
  	
  		mp[v]=u->val;
  	
  	if(u->left){
  		q.push({u->left,v-1});
  	}
  	
  	if(u->right){
  		q.push({u->right,v+1});
  	}
  }
  
  for(auto [v,val]:mp){
  	ans.push_back(val);
  }
  return ans;
}
TreeNode* buildTree(){
	int x;cin>>x;
	if(x==-1)return nullptr;
	TreeNode* root = new TreeNode(x);
	
	queue<TreeNode*>q;
	q.push(root);
	
	while(!q.empty()){
		auto u = q.front();
		q.pop();
		
		if(cin>>x && x!=-1){
			u->left = new TreeNode(x);
			q.push(u->left);
		}
		
		if(cin>>x && x!=-1){
			u->right = new TreeNode(x);
			q.push(u->right);
		}
	}
	return root;
}
int main() {
    TreeNode* root = buildTree();
   vector<int>ans = top(root);
    
    for(auto x : ans){
    	
    	cout<<x<<endl;
    }
	return 0;
}