#include using namespace std; int main() { unsigned long long N; cin >> N; unsigned long long M = N; if (popcount(N) == 1) { cout << -1 << " " - 1 << " " - 1; } else { for (unsigned long long i = 0; M != 0; ++i) { if (M & 1) { unsigned long long L = 1 << i; cout << N << " " << L << " " << N - L; return 0; } M >>= 1; // 右シフト } } } // N=3 // 011 // Aは右二つのどちらかが1(どちらともありえる) // Bは右二つのどちらかが1(どちらともありえる) // Cは右二つのどちらかが1(どちらともありえる) // AorB=BorC=AorCは必ず存在するか? // 010101011 // A A B BB // C C C CC // 存在する // 証明A=B=C=Nとすれば必ず成り立つ // A=B=C=Nのとき AxorBxorC=0になるか? // NxorNは0 // 0xorNはN // なのでならない // 3つの桁をxorして必ず0になるためには1が偶数個の時 // まず最初にA=Nとする // 次にNの適当な1の桁を立てたものをB // B以外の1の桁を立てたものをC // で成り立つ // 1のけたが1個だけの時 // 1000 // A=N B=N C=0 // だけ 0は正の整数じゃないみたいなので-1を出力