add extend_gcd