#include "bits/stdc++.h"
// #include "grader.cpp"
#include "souvenirs.h"
using namespace std;
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define ll long long
#define pb push_back
#define pii pair<int, int>
#define pli pair<ll, int>
#define pll pair<ll, ll>
#define tr(i, c) for(auto i = c.begin(); i != c.end(); ++i)
#define wr puts("----------------")
#define mm make_pair
template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
using node=pair<vector<int>, ll>;
void buy_souvenirs(int n, ll p0){
int cnt=0;
ll prev=p0;
bool have=1;
for(int i = 1; i < n-1; ++i){
node P=transaction(prev-1);
ll pi;
if((int)P.ff.size()==1){
assert(P.ss<2);
if(P.ss==0)
pi=prev-1;
else
pi=prev-2, have=0;
int rep=i-1;
while(rep--)
P=transaction(pi);
}
else{
assert((int)P.ff.size()==2);
assert(have);
cnt++;
pi=prev-2;
int rep=i-1;
while(rep--)
node P=transaction(pi);
}
prev=pi;
}
if(have){
int rep=n-1-cnt;
while(rep--)
node P=transaction(1);
return;
}
int rep=n-1;
while(rep--)
node P=transaction(prev-1);
return;
}