#include <bits/stdc++.h>
using namespace std;

using ll = long long;

struct TreeNode{
	int val;
	TreeNode* left;
	TreeNode* right;
	
	TreeNode(int val):val(val),left(nullptr),right(nullptr){};
};

void find(vector<int>&ans,TreeNode* root,int k){
	if(k<0||root == nullptr)return;
	if(k == 0 )ans.push_back(root->val);
	find(ans,root->left,k-1);
	find(ans,root->right,k-1);
}
void dfs(TreeNode* root,TreeNode* tar,vector<int>&ans,int k,bool &found,int &dist){
	if(root == nullptr)return;
	
	if(root == tar){
		found = true;
		dist = 0;
		find(ans,root,k);
		return;
	}
	
	dfs(root->left,tar,ans,k,found,dist);
	
	if(found){
		dist++;
		if(dist == k)ans.push_back(root->val);
		find(ans,root->right,dist-k-1);
		return;
	}
	
	dfs(root->right,tar,ans,k,found,dist);
		if(found){
		dist++;
		if(dist == k)ans.push_back(root->val);
		find(ans,root->left,dist-k-1);
		return;
	}
}
vector<int>distK(TreeNode* root,TreeNode* tar,int k){
	vector<int>ans;
	bool found = false;
	int dist = 0;
	
	dfs(root,tar,ans,k,found,dist);
	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;
}

TreeNode* findNode(TreeNode* root,int val){
	if(!root)return nullptr;
	if(root->val == val)return root;
	TreeNode* left = findNode(root->left,val);
	if(left)return left;
	return findNode(root->right,val);
}
int main() {
TreeNode* root = buildTree();
int val,k;
cin>>val>>k;
TreeNode* tar = findNode(root,val);
vector<int>ans = distK(root,tar,k);

for(int &x : ans){
	cout<<x;
}
	return 0;
}