#include <iostream>
using namespace std;
//三元组存放数据
class data
{
public:
int gcd;
int x;
int y;
};
data d;
/*算法功能*/
//对于 d =gcd(a,b) = ax + by,求解x,y 的整数值
//注意:x ,y可以是负数
data gcdPlus(int a, int b)
{
//这个基线其实就是普通的gcd递归算法,只不过是多了 x,y
//其中gcd是由基线确定的,一旦确定了,在递归中就不再改变了
if(b == 0){
data d_temp{a,1,0};
return d_temp;
}else{
data temp = gcdPlus(b, a % b);
//这个算法的核心,其正确性详见《算法导论》P549
data d1 {temp.gcd,temp.y,temp.x- (a/b) * temp.y};
return d1;
}
}
int main()
{
int a,b;
cin >> a >> b;
d = gcdPlus(a,b);
cout << d.gcd << endl;
cout << d.x << endl;
cout << d.y << endl;
return 0;
}