#pragma warning(disable:4018)
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
using namespace std;
static const double EPS = 1e-5 ;
typedef long long ll;
int nn;
vector< int > aa;
int minSearch( ) {
for ( int i= 0 ; i< aa.size ( ) ; i++ ) {
if ( aa[ i] ! = i+ 1 ) return i+ 1 ;
}
return aa.size ( ) + 1 ;
}
int calc( int a, int b, int c) {
return abs ( ( ll) nn - ( ll) a* ( ll) b* ( ll) c) ;
}
bool isMember( int n) {
for ( int i= 0 ; i< aa.size ( ) ; i++ ) {
if ( aa[ i] == n) return true ;
if ( aa[ i] > n) break ;
}
return false ;
}
bool isPlus( int a, int b, int c) {
return ( nn - ( ll) a* ( ll) b* ( ll) c) < 0 ;
}
class AvoidingProduct {
public :
vector < int > getTriple( vector < int > a, int n) {
nn = n;
sort( a.begin ( ) , a.end ( ) ) ;
aa = a;
int mina = minSearch( ) ;
//cout << mina << endl;
int ans = calc( mina, mina, mina) ;
int tmp;
int ii,jj,kk;
ii = jj = kk = mina;
for ( int i= mina ; i<= 2 * n ; i++ ) {
if ( isMember( i) ) continue ;
if ( isPlus( i,i,i) && calc( i,i,i) > ans) break ;
for ( int j= i ; j<= 2 * n ; j++ ) {
if ( isMember( j) ) continue ;
if ( isPlus( i,j,j) && calc( i,j,j) > ans) break ;
for ( int k= j ; k<= 2 * n ; k++ ) {
if ( isMember( k) ) continue ;
tmp = calc( i,j,k) ;
if ( isPlus( i,j,k) && tmp> ans) break ;
if ( ans > tmp) {
ans = tmp;
ii= i;
jj= j;
kk= k;
}
}
}
}
vector< int > ret;
ret.clear ( ) ;
ret.push_back ( ii) ;
ret.push_back ( jj) ;
ret.push_back ( kk) ;
return ret;
}
// BEGIN CUT HERE
public :
void run_test( int Case) { if ( ( Case == - 1 ) || ( Case == 0 ) ) test_case_0( ) ; if ( ( Case == - 1 ) || ( Case == 1 ) ) test_case_1( ) ; if ( ( Case == - 1 ) || ( Case == 2 ) ) test_case_2( ) ; if ( ( Case == - 1 ) || ( Case == 3 ) ) test_case_3( ) ; if ( ( Case == - 1 ) || ( Case == 4 ) ) test_case_4( ) ; if ( ( Case == - 1 ) || ( Case == 5 ) ) test_case_5( ) ; }
private :
template < typename T> string print_array( const vector< T> & V) { ostringstream os; os << "{ " ; for ( typename vector< T> :: const_iterator iter = V.begin ( ) ; iter ! = V.end ( ) ; ++ iter) os << '\" ' << * iter << "\" ," ; os << " }" ; return os.str ( ) ; }
void verify_case( int Case, const vector < int > & Expected, const vector < int > & Received) { cerr << "Test Case #" << Case << "..." ; if ( Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "\t Expected: " << print_array( Expected) << endl; cerr << "\t Received: " << print_array( Received) << endl; } }
void test_case_0( ) { int Arr0[ ] = { 2 ,4 } ; vector < int > Arg0( Arr0, Arr0 + ( sizeof ( Arr0) / sizeof ( Arr0[ 0 ] ) ) ) ; int Arg1 = 4 ; int Arr2[ ] = { 1 , 1 , 3 } ; vector < int > Arg2( Arr2, Arr2 + ( sizeof ( Arr2) / sizeof ( Arr2[ 0 ] ) ) ) ; verify_case( 0 , Arg2, getTriple( Arg0, Arg1) ) ; }
void test_case_1( ) { int Arr0[ ] = { 1 } ; vector < int > Arg0( Arr0, Arr0 + ( sizeof ( Arr0) / sizeof ( Arr0[ 0 ] ) ) ) ; int Arg1 = 10 ; int Arr2[ ] = { 2 , 2 , 2 } ; vector < int > Arg2( Arr2, Arr2 + ( sizeof ( Arr2) / sizeof ( Arr2[ 0 ] ) ) ) ; verify_case( 1 , Arg2, getTriple( Arg0, Arg1) ) ; }
void test_case_2( ) { int Arr0[ ] = { 1 ,2 } ; vector < int > Arg0( Arr0, Arr0 + ( sizeof ( Arr0) / sizeof ( Arr0[ 0 ] ) ) ) ; int Arg1 = 10 ; int Arr2[ ] = { 3 , 3 , 3 } ; vector < int > Arg2( Arr2, Arr2 + ( sizeof ( Arr2) / sizeof ( Arr2[ 0 ] ) ) ) ; verify_case( 2 , Arg2, getTriple( Arg0, Arg1) ) ; }
void test_case_3( ) { int Arr0[ ] = { 1 ,3 } ; vector < int > Arg0( Arr0, Arr0 + ( sizeof ( Arr0) / sizeof ( Arr0[ 0 ] ) ) ) ; int Arg1 = 12 ; int Arr2[ ] = { 2 , 2 , 2 } ; vector < int > Arg2( Arr2, Arr2 + ( sizeof ( Arr2) / sizeof ( Arr2[ 0 ] ) ) ) ; verify_case( 3 , Arg2, getTriple( Arg0, Arg1) ) ; }
void test_case_4( ) { int Arr0[ ] = { 1 ,3 } ; vector < int > Arg0( Arr0, Arr0 + ( sizeof ( Arr0) / sizeof ( Arr0[ 0 ] ) ) ) ; int Arg1 = 13 ; int Arr2[ ] = { 2 , 2 , 4 } ; vector < int > Arg2( Arr2, Arr2 + ( sizeof ( Arr2) / sizeof ( Arr2[ 0 ] ) ) ) ; verify_case( 4 , Arg2, getTriple( Arg0, Arg1) ) ; }
void test_case_5( ) { int Arr0[ ] = { 1 ,15 } ; vector < int > Arg0( Arr0, Arr0 + ( sizeof ( Arr0) / sizeof ( Arr0[ 0 ] ) ) ) ; int Arg1 = 90 ; int Arr2[ ] = { 2 , 5 , 9 } ; vector < int > Arg2( Arr2, Arr2 + ( sizeof ( Arr2) / sizeof ( Arr2[ 0 ] ) ) ) ; verify_case( 5 , Arg2, getTriple( Arg0, Arg1) ) ; }
// END CUT HERE
} ;
// BEGIN CUT HERE
int main( ) {
AvoidingProduct ___test;
___test.run_test ( - 1 ) ;
}
// END CUT HERE
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDAxOCkKI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDxjZmxvYXQ+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxtZW1vcnk+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGNvbXBsZXg+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPHF1ZXVlPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdGF0aWMgY29uc3QgZG91YmxlIEVQUyA9IDFlLTU7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKaW50IG5uOwp2ZWN0b3I8aW50PiBhYTsKCmludCBtaW5TZWFyY2goKXsKCQoJZm9yKGludCBpPTAgOyBpPGFhLnNpemUoKSA7IGkrKyl7CgkJaWYoYWFbaV0hPWkrMSkgcmV0dXJuIGkrMTsKCX0KCXJldHVybiBhYS5zaXplKCkrMTsKfQoKaW50IGNhbGMoaW50IGEsIGludCBiLCBpbnQgYyl7CglyZXR1cm4gYWJzKChsbClubiAtIChsbClhKihsbCliKihsbCljKTsKfQoKYm9vbCBpc01lbWJlcihpbnQgbil7Cglmb3IoaW50IGk9MCA7IGk8YWEuc2l6ZSgpIDsgaSsrKXsKCQlpZihhYVtpXT09bikgcmV0dXJuIHRydWU7CgkJaWYoYWFbaV0+bikgYnJlYWs7Cgl9CglyZXR1cm4gZmFsc2U7Cn0KCmJvb2wgaXNQbHVzKGludCBhLCBpbnQgYiwgaW50IGMpewoJcmV0dXJuIChubiAtIChsbClhKihsbCliKihsbCljKSA8IDA7Cn0KCmNsYXNzIEF2b2lkaW5nUHJvZHVjdCB7CnB1YmxpYzoKICB2ZWN0b3IgPGludD4gZ2V0VHJpcGxlKHZlY3RvciA8aW50PiBhLCBpbnQgbikgewoJICBubiA9IG47CgoJICBzb3J0KGEuYmVnaW4oKSwgYS5lbmQoKSk7ICAgICAgCgkgIGFhID0gYTsKCSAgCgkgIGludCBtaW5hID0gbWluU2VhcmNoKCk7CgkgIC8vY291dCA8PCBtaW5hIDw8IGVuZGw7CgoJICBpbnQgYW5zID0gY2FsYyhtaW5hLCBtaW5hLCBtaW5hKTsKCSAgaW50IHRtcDsKCSAgaW50IGlpLGpqLGtrOwoJICBpaSA9IGpqID0ga2sgPSBtaW5hOwoKCSAgZm9yKGludCBpPW1pbmEgOyBpPD0yKm4gOyBpKyspewoJCSAgaWYoaXNNZW1iZXIoaSkpIGNvbnRpbnVlOwoKCQkgIGlmKGlzUGx1cyhpLGksaSkgJiYgY2FsYyhpLGksaSk+YW5zKSBicmVhazsKCgkJICBmb3IoaW50IGo9aSA7IGo8PTIqbiA7IGorKyl7CgkJCSAgaWYoaXNNZW1iZXIoaikpIGNvbnRpbnVlOwoKCQkJICBpZihpc1BsdXMoaSxqLGopICYmIGNhbGMoaSxqLGopPmFucykgYnJlYWs7CgoJCQkgIGZvcihpbnQgaz1qIDsgazw9MipuIDsgaysrKXsKCQkJCSAgaWYoaXNNZW1iZXIoaykpIGNvbnRpbnVlOwoKCQkJCSAgdG1wID0gY2FsYyhpLGosayk7IAoKCQkJCSAgaWYoaXNQbHVzKGksaixrKSAmJiB0bXA+YW5zKSBicmVhazsKCgkJCQkgIGlmKGFucyA+IHRtcCl7CgkJCQkJICBhbnMgPSB0bXA7CgkJCQkJICBpaT1pOwoJCQkJCSAgamo9ajsKCQkJCQkgIGtrPWs7CgkJCQkgIH0KCQkJICB9CgkJICB9CgkgIH0KCgkgIHZlY3RvcjxpbnQ+IHJldDsKCSAgcmV0LmNsZWFyKCk7CgkgIHJldC5wdXNoX2JhY2soaWkpOwoJICByZXQucHVzaF9iYWNrKGpqKTsKCSAgcmV0LnB1c2hfYmFjayhrayk7CgkgIHJldHVybiByZXQ7CiAgfQoKICAKLy8gQkVHSU4gQ1VUIEhFUkUKCXB1YmxpYzoKCXZvaWQgcnVuX3Rlc3QoaW50IENhc2UpIHsgaWYgKChDYXNlID09IC0xKSB8fCAoQ2FzZSA9PSAwKSkgdGVzdF9jYXNlXzAoKTsgaWYgKChDYXNlID09IC0xKSB8fCAoQ2FzZSA9PSAxKSkgdGVzdF9jYXNlXzEoKTsgaWYgKChDYXNlID09IC0xKSB8fCAoQ2FzZSA9PSAyKSkgdGVzdF9jYXNlXzIoKTsgaWYgKChDYXNlID09IC0xKSB8fCAoQ2FzZSA9PSAzKSkgdGVzdF9jYXNlXzMoKTsgaWYgKChDYXNlID09IC0xKSB8fCAoQ2FzZSA9PSA0KSkgdGVzdF9jYXNlXzQoKTsgaWYgKChDYXNlID09IC0xKSB8fCAoQ2FzZSA9PSA1KSkgdGVzdF9jYXNlXzUoKTsgfQoJcHJpdmF0ZToKCXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJpbmcgcHJpbnRfYXJyYXkoY29uc3QgdmVjdG9yPFQ+ICZWKSB7IG9zdHJpbmdzdHJlYW0gb3M7IG9zIDw8ICJ7ICI7IGZvciAodHlwZW5hbWUgdmVjdG9yPFQ+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gVi5iZWdpbigpOyBpdGVyICE9IFYuZW5kKCk7ICsraXRlcikgb3MgPDwgJ1wiJyA8PCAqaXRlciA8PCAiXCIsIjsgb3MgPDwgIiB9IjsgcmV0dXJuIG9zLnN0cigpOyB9Cgl2b2lkIHZlcmlmeV9jYXNlKGludCBDYXNlLCBjb25zdCB2ZWN0b3IgPGludD4gJkV4cGVjdGVkLCBjb25zdCB2ZWN0b3IgPGludD4gJlJlY2VpdmVkKSB7IGNlcnIgPDwgIlRlc3QgQ2FzZSAjIiA8PCBDYXNlIDw8ICIuLi4iOyBpZiAoRXhwZWN0ZWQgPT0gUmVjZWl2ZWQpIGNlcnIgPDwgIlBBU1NFRCIgPDwgZW5kbDsgZWxzZSB7IGNlcnIgPDwgIkZBSUxFRCIgPDwgZW5kbDsgY2VyciA8PCAiXHRFeHBlY3RlZDogIiA8PCBwcmludF9hcnJheShFeHBlY3RlZCkgPDwgZW5kbDsgY2VyciA8PCAiXHRSZWNlaXZlZDogIiA8PCBwcmludF9hcnJheShSZWNlaXZlZCkgPDwgZW5kbDsgfSB9Cgl2b2lkIHRlc3RfY2FzZV8wKCkgeyBpbnQgQXJyMFtdID0gezIsNH07IHZlY3RvciA8aW50PiBBcmcwKEFycjAsIEFycjAgKyAoc2l6ZW9mKEFycjApIC8gc2l6ZW9mKEFycjBbMF0pKSk7IGludCBBcmcxID0gNDsgaW50IEFycjJbXSA9IHsxLCAxLCAzIH07IHZlY3RvciA8aW50PiBBcmcyKEFycjIsIEFycjIgKyAoc2l6ZW9mKEFycjIpIC8gc2l6ZW9mKEFycjJbMF0pKSk7IHZlcmlmeV9jYXNlKDAsIEFyZzIsIGdldFRyaXBsZShBcmcwLCBBcmcxKSk7IH0KCXZvaWQgdGVzdF9jYXNlXzEoKSB7IGludCBBcnIwW10gPSB7MX07IHZlY3RvciA8aW50PiBBcmcwKEFycjAsIEFycjAgKyAoc2l6ZW9mKEFycjApIC8gc2l6ZW9mKEFycjBbMF0pKSk7IGludCBBcmcxID0gMTA7IGludCBBcnIyW10gPSB7MiwgMiwgMiB9OyB2ZWN0b3IgPGludD4gQXJnMihBcnIyLCBBcnIyICsgKHNpemVvZihBcnIyKSAvIHNpemVvZihBcnIyWzBdKSkpOyB2ZXJpZnlfY2FzZSgxLCBBcmcyLCBnZXRUcmlwbGUoQXJnMCwgQXJnMSkpOyB9Cgl2b2lkIHRlc3RfY2FzZV8yKCkgeyBpbnQgQXJyMFtdID0gezEsMn07IHZlY3RvciA8aW50PiBBcmcwKEFycjAsIEFycjAgKyAoc2l6ZW9mKEFycjApIC8gc2l6ZW9mKEFycjBbMF0pKSk7IGludCBBcmcxID0gMTA7IGludCBBcnIyW10gPSB7MywgMywgMyB9OyB2ZWN0b3IgPGludD4gQXJnMihBcnIyLCBBcnIyICsgKHNpemVvZihBcnIyKSAvIHNpemVvZihBcnIyWzBdKSkpOyB2ZXJpZnlfY2FzZSgyLCBBcmcyLCBnZXRUcmlwbGUoQXJnMCwgQXJnMSkpOyB9Cgl2b2lkIHRlc3RfY2FzZV8zKCkgeyBpbnQgQXJyMFtdID0gezEsM307IHZlY3RvciA8aW50PiBBcmcwKEFycjAsIEFycjAgKyAoc2l6ZW9mKEFycjApIC8gc2l6ZW9mKEFycjBbMF0pKSk7IGludCBBcmcxID0gMTI7IGludCBBcnIyW10gPSB7MiwgMiwgMiB9OyB2ZWN0b3IgPGludD4gQXJnMihBcnIyLCBBcnIyICsgKHNpemVvZihBcnIyKSAvIHNpemVvZihBcnIyWzBdKSkpOyB2ZXJpZnlfY2FzZSgzLCBBcmcyLCBnZXRUcmlwbGUoQXJnMCwgQXJnMSkpOyB9Cgl2b2lkIHRlc3RfY2FzZV80KCkgeyBpbnQgQXJyMFtdID0gezEsM307IHZlY3RvciA8aW50PiBBcmcwKEFycjAsIEFycjAgKyAoc2l6ZW9mKEFycjApIC8gc2l6ZW9mKEFycjBbMF0pKSk7IGludCBBcmcxID0gMTM7IGludCBBcnIyW10gPSB7MiwgMiwgNCB9OyB2ZWN0b3IgPGludD4gQXJnMihBcnIyLCBBcnIyICsgKHNpemVvZihBcnIyKSAvIHNpemVvZihBcnIyWzBdKSkpOyB2ZXJpZnlfY2FzZSg0LCBBcmcyLCBnZXRUcmlwbGUoQXJnMCwgQXJnMSkpOyB9Cgl2b2lkIHRlc3RfY2FzZV81KCkgeyBpbnQgQXJyMFtdID0gezEsMTV9OyB2ZWN0b3IgPGludD4gQXJnMChBcnIwLCBBcnIwICsgKHNpemVvZihBcnIwKSAvIHNpemVvZihBcnIwWzBdKSkpOyBpbnQgQXJnMSA9IDkwOyBpbnQgQXJyMltdID0gezIsIDUsIDkgfTsgdmVjdG9yIDxpbnQ+IEFyZzIoQXJyMiwgQXJyMiArIChzaXplb2YoQXJyMikgLyBzaXplb2YoQXJyMlswXSkpKTsgdmVyaWZ5X2Nhc2UoNSwgQXJnMiwgZ2V0VHJpcGxlKEFyZzAsIEFyZzEpKTsgfQoKLy8gRU5EIENVVCBIRVJFCgp9OwoKLy8gQkVHSU4gQ1VUIEhFUkUKaW50IG1haW4oKSB7CiAgQXZvaWRpbmdQcm9kdWN0IF9fX3Rlc3Q7CiAgX19fdGVzdC5ydW5fdGVzdCgtMSk7Cn0KLy8gRU5EIENVVCBIRVJFCg==