void abort() { };

                        
                                                                                                                                                          
                                                                          
extern int __VERIFIER_nondet_int();
                        
void assume_abort_if_not(int cond) {
  if(!cond) {abort();}
}
/*@ 
    requires ((cond != 0)) && (cond != 0);
    ensures ((cond != 0)) && (1);
@*/
void __VERIFIER_assert(int cond) {
    if (!(cond)) {
    ERROR:
        {/*@ assert(0); */;}
    }
    return;
}


int main() {
    int n;
    long long a, s, t;
    n = __VERIFIER_nondet_int();
    assume_abort_if_not(n>=0 && n<=50);

    a = 0;
    s = 1;
    t = 1;

/*@
loop invariant (((((((__int128) a * 2) + ((__int128) a * a)) + 1) == s) && (t == (((__int128) a * 2) + 1))));
@*/
    while (1) {
        __VERIFIER_assert(t == 2*a + 1);
        __VERIFIER_assert(s == (a + 1) * (a + 1));
	__VERIFIER_assert(t*t - 4*s + 2*t + 1 == 0);
        // the above 2 should be equiv to 

        if (!(s <= n))
            break;

        a = a + 1;
        t = t + 2;
        s = s + t;
    }
    
    __VERIFIER_assert(t == 2 * a + 1);
    __VERIFIER_assert(s == (a + 1) * (a + 1));
    __VERIFIER_assert(t*t - 4*s + 2*t + 1 == 0);

    return 0;
}