void abort() { };

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

int main() {
    int A, R;
    long long u, v, r;
    A = __VERIFIER_nondet_int();
    assume_abort_if_not(A>=0 && A<=5);
    R = __VERIFIER_nondet_int();
    assume_abort_if_not(R>=0 && R<=5);
    assume_abort_if_not((((long long) R - 1) * ((long long) R - 1)) < A);
    //assume_abort_if_not(A <= R * R);
    assume_abort_if_not(A % 2 == 1);

    u = ((long long) 2 * R) + 1;
    v = 1;
    r = ((long long) R * R) - A;


/*@
loop invariant (((((__int128) v * 2) + ((__int128) u * u)) == (((((__int128) v * v) + ((__int128) u * 2)) + ((long long) A * 4)) + ((__int128) r * 4))));
@*/
    while (1) {
        __VERIFIER_assert(4*(A+r) == u*u - v*v - 2*u + 2*v);
        if (!(r != 0))
            break;

/*@
loop invariant (((((__int128) v * 2) + ((__int128) u * u)) == (((((__int128) v * v) + ((__int128) u * 2)) + ((long long) A * 4)) + ((__int128) r * 4))));
@*/
        while (1) {
	    __VERIFIER_assert(4*(A+r) == u*u - v*v - 2*u + 2*v);
            if (!(r > 0))
                break;
            r = r - v;
            v = v + 2;
        }

/*@
loop invariant (((((__int128) v * 2) + ((__int128) u * u)) == (((((__int128) v * v) + ((__int128) u * 2)) + ((long long) A * 4)) + ((__int128) r * 4))));
@*/
        while (1) {
	    __VERIFIER_assert(4*(A+r) == u*u - v*v - 2*u + 2*v);
            if (!(r < 0))
                break;
            r = r + u;
            u = u + 2;
        }
    }

    __VERIFIER_assert(((long long) 4*A) == u*u - v*v - 2*u + 2*v);
    return 0;
}