def b_gcd(m, n):
fact = 1
while m > 1 and n > 1 and m != n:
om, on = m & 1, n & 1
if om and on:
m, n = abs(m - n)>>1, min(m, n)
elif not (om or on):
fact, m, n = fact<<1, m>>1, n>>1
else:
m, n = (m>>1, n) if on else (m, n>>1)
m, n = (m, n) if n > m else (n, m)
return (m or n)<<(fact - 1)
ZGVmIGJfZ2NkKG0sIG4pOgoJZmFjdCA9IDEKCQoJd2hpbGUgbSA+IDEgYW5kIG4gPiAxIGFuZCBtICE9IG46CgkJCgkJb20sIG9uID0gbSAmIDEsIG4gJiAxCgkJCgkJaWYgb20gYW5kIG9uOgoJCQltLCBuID0gYWJzKG0gLSBuKT4+MSwgbWluKG0sIG4pCgkJCQoJCWVsaWYgbm90IChvbSBvciBvbik6CgkJCWZhY3QsIG0sIG4gPSBmYWN0PDwxLCBtPj4xLCBuPj4xCgkJCgkJZWxzZToKCQkJbSwgbiA9IChtPj4xLCBuKSBpZiBvbiBlbHNlIChtLCBuPj4xKQoJCgltLCBuID0gKG0sIG4pIGlmIG4gPiBtIGVsc2UgKG4sIG0pCglyZXR1cm4gKG0gb3Igbik8PChmYWN0IC0gMSk=