#include <bits/stdc++.h>
#include <cstdlib>
using namespace std;
using ll=long long;
int main() {
ll n;
cin>>n;
ll u=n;
vector<ll> kettes;
ll cnt=0;
int cntz=0;
while (n>0){
kettes.push_back(n%2);
if (n%2==1) cntz++;
n/=2;
cnt++;
}
bool talalt=false;
bool egyestalalt=false;
bool sorozat=true;
vector<ll> mego;
for (int i=0; i<cnt;i++){
ll x=kettes[i];
if (x==0 && (!talalt)){
while (kettes[i]==0){
i++;
mego.push_back(0);
}
talalt=true;
mego[mego.size()-1]=1;
i--;
}
else{
if (!egyestalalt && talalt){
mego.push_back(0);
egyestalalt=true;
}
else mego.push_back(x);
}
}
reverse(mego.begin(),mego.end());
if (!talalt or !egyestalalt){
cout<<-1<<endl;
}
else{
ll z=1;
ll ans=0;
for (int i=cnt-1; i>=0;i--){
if (mego[i]==1) ans+=z;
z*=2;
}
cout<<ans<<endl;
}
talalt=false;
int cnte=0;
int cnta=0;
vector<int> mego2;
for (int i=cnt-1; i>=0;i--){
ll x=kettes[i];
if (x==0 && (!talalt)){
while (kettes[i]==0 && i>=0){
i--;
mego2.push_back(0);
}
talalt=true;
mego2[mego2.size()-1]=1;
i++;
}
else{
if (talalt){
if (x==1){
cnte++;
}
cnta++;
}
else{
mego2.push_back(x);
}
}
}
for (int i=0; i<cnta+1-cnte;i++){
mego2.push_back(0);
}
for (int i=0;i<cnte-1;i++){
mego2.push_back(1);
}
ll z=1;
ll ans=0;
if (cntz==1){
cout<<u*2;
}
else{
for (int i=cnt-1; i>=0;i--){
if (mego2[i]==1) ans+=z;
z*=2;
}
cout<<ans<<endl;
}
}