#include <bits/stdc++.h>
using namespace std;
int main()
{
long long int n;
cin >> n;
vector<int> alap;
long long int eredeti = n;
int valtKezdKis = -1;
int valtKezdNagy = -1;
bool elsok = true;
bool elson = true;
int egysz = 0;
int egyszk, egyszn;
long long int valtozas = 2;
long long int valtozask, valtozasn;
alap.push_back(n % 2);
if(n % 2 == 1){
egysz++;
}
n /= 2;
while(n > 0){
alap.push_back(n % 2);
if(n % 2 == 1){egysz++;}
//cout << n % 2 << " ";
n /= 2;
//cout << n << "\n";
valtozas *= 2;
if(elsok && alap[alap.size() - 1] == 1 && alap[alap.size() - 2] == 0){ //kicsi 10 t keresünk
valtKezdKis = alap.size() - 2;
egyszk = egysz - 1;
valtozask = valtozas / 4;
elsok = false;
}
if(elson && alap[alap.size() - 1] == 0 && alap[alap.size() - 2] == 1){ //nagy 01 t keresünk
valtKezdNagy = alap.size() - 2;
egyszn = egysz - 1;
valtozasn = valtozas / 4;
elson = false;
}
}
long long int valaszk = eredeti;
long long int valaszn = eredeti;
long long int hatvany = 1;
if(elsok){
valaszk = -1;
elsok = false;
} else{
for(int i = 0; i < valtKezdKis; i++){
if(alap[i] == 1 && i < valtKezdKis - egyszk){
valaszk -= hatvany;
} else if(alap[i] == 0 && i >= valtKezdKis - egyszk){
valaszk += hatvany;
}
hatvany *= 2;
}
valaszk -= valtozask;
}
hatvany = 1;
if(elson){
alap.push_back(0);
valtKezdNagy = alap.size() - 2;
egyszn = egysz - 1;
valtozasn = valtozas / 2;
elson = false;
}
for(int i = 0; i < valtKezdNagy; i++){
if(alap[i] == 0 && i < egyszn){
valaszn += hatvany;
} else if(alap[i] == 1 && i >= egyszn){
valaszn -= hatvany;
}
hatvany *= 2;
}
valaszn += valtozasn;
/*for(int i = alap.size() - 1; i >= 0; i--){
cout << alap[i] << " ";
}*/
//cout << "\n";
cout /*<< valtKezdKis << " " << egyszk << " " << valtozask << " " */<< valaszk << "\n";
cout /*<< valtKezdNagy << " " << egyszn << " " << valtozasn << " " */<< valaszn << "\n";
}