#include <bits/stdc++.h>
#include "light.h"
using namespace std;
#ifdef LOCAL
#include "grader.cpp"
#endif
#define int __int128_t
#define ll long long
const int MAXLG=80;
int power[MAXLG+1];
int MAX=1;
int n;
vector<int> state;
int sum=0;
void prepare(){
n=1;
power[0]=1;
for(int bruh=0;bruh<MAXLG;bruh++){
MAX*=2;
power[bruh+1]=MAX;
}
int len=1;
for(int i=0;i<=MAXLG;i++){
state.push_back(MAX-len+1);
len<<=1;
}
return;
}
vector<ll> trans(){
vector<ll> v;
v.push_back(1);
for(int i=0;i<state.size();i++){
int len=MAX-state[i]+1;
if(len<=n){
v.push_back(n-len+1);
}
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
return v;
}
pair<ll,vector<ll>> join(ll pa){
n+=pa;
return {pa,trans()};
}
void dnc(int layer,int old,int pa,int coef){
assert(pa>0);
assert(old+pa<power[layer]);
assert(layer>0);
if(old>=power[layer-1]){
dnc(layer-1,old-power[layer-1],pa,coef);
return;
}
if(old+pa<=power[layer-1]){
for(int bruh=0;bruh<layer;bruh++){
if(power[layer-1]-power[bruh]+1<=old+pa+1){
state.push_back(coef+power[layer-1]-power[bruh]+1);
}
}
if(old+pa<power[layer-1]){
state.push_back(coef+old+pa+1);
}
if(old+pa==power[layer-1]){
return;
}
dnc(layer-1,old,pa,coef+power[layer-1]);
}
else{
dnc(layer-1,0,old+pa-power[layer-1],coef);
}
}
pair<ll,vector<ll>> leave(ll pa){
state.clear(),state.resize(0);
dnc(MAXLG,sum,pa,0);
sum+=pa;
return {pa,trans()};
}