#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;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCnN0cnVjdCBUcmVlTm9kZXsKCWludCB2YWw7CglUcmVlTm9kZSogbGVmdDsKCVRyZWVOb2RlKiByaWdodDsKCQoJVHJlZU5vZGUoaW50IHZhbCk6dmFsKHZhbCksbGVmdChudWxscHRyKSxyaWdodChudWxscHRyKXt9Owp9OwoKdm9pZCBmaW5kKHZlY3RvcjxpbnQ+JmFucyxUcmVlTm9kZSogcm9vdCxpbnQgayl7CglpZihrPDB8fHJvb3QgPT0gbnVsbHB0cilyZXR1cm47CglpZihrID09IDAgKWFucy5wdXNoX2JhY2socm9vdC0+dmFsKTsKCWZpbmQoYW5zLHJvb3QtPmxlZnQsay0xKTsKCWZpbmQoYW5zLHJvb3QtPnJpZ2h0LGstMSk7Cn0Kdm9pZCBkZnMoVHJlZU5vZGUqIHJvb3QsVHJlZU5vZGUqIHRhcix2ZWN0b3I8aW50PiZhbnMsaW50IGssYm9vbCAmZm91bmQsaW50ICZkaXN0KXsKCWlmKHJvb3QgPT0gbnVsbHB0cilyZXR1cm47CgkKCWlmKHJvb3QgPT0gdGFyKXsKCQlmb3VuZCA9IHRydWU7CgkJZGlzdCA9IDA7CgkJZmluZChhbnMscm9vdCxrKTsKCQlyZXR1cm47Cgl9CgkKCWRmcyhyb290LT5sZWZ0LHRhcixhbnMsayxmb3VuZCxkaXN0KTsKCQoJaWYoZm91bmQpewoJCWRpc3QrKzsKCQlpZihkaXN0ID09IGspYW5zLnB1c2hfYmFjayhyb290LT52YWwpOwoJCWZpbmQoYW5zLHJvb3QtPnJpZ2h0LGRpc3Qtay0xKTsKCQlyZXR1cm47Cgl9CgkKCWRmcyhyb290LT5yaWdodCx0YXIsYW5zLGssZm91bmQsZGlzdCk7CgkJaWYoZm91bmQpewoJCWRpc3QrKzsKCQlpZihkaXN0ID09IGspYW5zLnB1c2hfYmFjayhyb290LT52YWwpOwoJCWZpbmQoYW5zLHJvb3QtPmxlZnQsZGlzdC1rLTEpOwoJCXJldHVybjsKCX0KfQp2ZWN0b3I8aW50PmRpc3RLKFRyZWVOb2RlKiByb290LFRyZWVOb2RlKiB0YXIsaW50IGspewoJdmVjdG9yPGludD5hbnM7Cglib29sIGZvdW5kID0gZmFsc2U7CglpbnQgZGlzdCA9IDA7CgkKCWRmcyhyb290LHRhcixhbnMsayxmb3VuZCxkaXN0KTsKCXJldHVybiBhbnMgOwp9CgpUcmVlTm9kZSogYnVpbGRUcmVlKCl7CglpbnQgeDsgY2luPj54OwoJaWYoeCA9PSAtMSlyZXR1cm4gbnVsbHB0cjs7CgkKCVRyZWVOb2RlKiByb290ID0gbmV3IFRyZWVOb2RlKHgpOwoJcXVldWU8VHJlZU5vZGUqPnE7CglxLnB1c2gocm9vdCk7CgkKCXdoaWxlKCFxLmVtcHR5KCkpewoJCWF1dG8gdSA9IHEuZnJvbnQoKTsKCQlxLnBvcCgpOwoJCQoJCWlmKGNpbj4+eCAmJiB4IT0tMSl7CgkJCXUtPmxlZnQgPSBuZXcgVHJlZU5vZGUoeCk7CgkJCXEucHVzaCh1LT5sZWZ0KTsKCQl9CgkJCgkJCWlmKGNpbj4+eCAmJiB4IT0tMSl7CgkJCXUtPnJpZ2h0ID0gbmV3IFRyZWVOb2RlKHgpOwoJCQlxLnB1c2godS0+cmlnaHQpOwoJCX0KCX0KCXJldHVybiByb290Owp9CgpUcmVlTm9kZSogZmluZE5vZGUoVHJlZU5vZGUqIHJvb3QsaW50IHZhbCl7CglpZighcm9vdClyZXR1cm4gbnVsbHB0cjsKCWlmKHJvb3QtPnZhbCA9PSB2YWwpcmV0dXJuIHJvb3Q7CglUcmVlTm9kZSogbGVmdCA9IGZpbmROb2RlKHJvb3QtPmxlZnQsdmFsKTsKCWlmKGxlZnQpcmV0dXJuIGxlZnQ7CglyZXR1cm4gZmluZE5vZGUocm9vdC0+cmlnaHQsdmFsKTsKfQppbnQgbWFpbigpIHsKVHJlZU5vZGUqIHJvb3QgPSBidWlsZFRyZWUoKTsKaW50IHZhbCxrOwpjaW4+PnZhbD4+azsKVHJlZU5vZGUqIHRhciA9IGZpbmROb2RlKHJvb3QsdmFsKTsKdmVjdG9yPGludD5hbnMgPSBkaXN0Syhyb290LHRhcixrKTsKCmZvcihpbnQgJnggOiBhbnMpewoJY291dDw8eDsKfQoJcmV0dXJuIDA7Cn0=