fn inverse(a0: i32, m0: i32) -> i32 {
    var t: i32 = 0
    var newt: i32 = 1
    var r: i32 = m0
    var newr: i32 = a0
    while newr != 0 {
        let q: i32 = r / newr
        let nextT: i32 = t - q * newt
        t = newt
        newt = nextT
        let nextR: i32 = r - q * newr
        r = newr
        newr = nextR
    }
    if t < 0 {
        t = t + m0
    }
    return t
}

pub fn main(world: World) -> Void raises {
    if inverse(3, 11) == 4 {
        check world.out.write("modular inverse ok\n")
    }
}
