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 x1, x2;
    int y1, y2, y3;
    x1 = __VERIFIER_nondet_int();
    x2 = __VERIFIER_nondet_int();

    assume_abort_if_not(x1 >= 0);
    assume_abort_if_not(x2 != 0);

    y1 = 0;
    y2 = 0;
    y3 = x1;

/*@
loop invariant ((((((long long) x2 * y1) + y3) + y2) == x1));
@*/
    while (1) {
        __VERIFIER_assert(y1*x2 + y2 + y3 == x1);

        if (!(y3 != 0)) break;

        if (y2 + 1 == x2) {
            y1 = y1 + 1;
            y2 = 0;
            y3 = y3 - 1;
        } else {
            y2 = y2 + 1;
            y3 = y3 - 1;
        }
    }
    __VERIFIER_assert(y1*x2 + y2 == x1);
    return 0;
}