#include <bits/stdc++.h>
using namespace std;
#define all(v) (v).begin(),(v).end()

struct TreeNode{
	int data;
	TreeNode* left;
	TreeNode* right;
	
	TreeNode(int val):left(nullptr),right(nullptr),data(val){};
};
vector<int>postOrd(TreeNode* root){
	vector<int>post;
	if(root == nullptr)return post;
	
	stack<TreeNode*>st;
	st.push(root);
	
	while(!st.empty()){
		auto u = st.top();st.pop();
		
		post.push_back(u->data);
		
		if(u->left){
			st.push(u->left);
		}
		
		if(u->right){
			st.push(u->right);
		}
		
	}
	reverse(all(post));
	return post;
}
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>post =postOrd(root);
	for(int x:post)cout<<x;
	
	return 0;
}