#include <iostream>
using namespace std;
unsigned long long gcd(unsigned long long m, unsigned long long n)
{
while(m && n) if (m < n) n %= m; else m %= n;
return m + n;
}
void egypt(unsigned long long a, unsigned long long b)
{
unsigned long long g = gcd(a,b);
if (g != 1) { a/=g; b/=g;}
if (a > b)
{
cout << a/b;
a %= b;
if (a == 0)
{
cout << endl;
return;
}
else
{
cout << " + ";
egypt(a,b);
}
}
else if (a == 1)
{
cout << "1/" << b << endl;
return;
}
else
{
unsigned long long n = (b+a)/a;
cout << "1/" << n << " + ";
egypt(a*n-b,b*n);
}
}
int main(int argc, const char * argv[])
{
egypt(10,7);
egypt(37,15);
egypt(43,48);
egypt(5,121);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdW5zaWduZWQgbG9uZyBsb25nIGdjZCh1bnNpZ25lZCBsb25nIGxvbmcgbSwgdW5zaWduZWQgbG9uZyBsb25nIG4pCnsKICAgIHdoaWxlKG0gJiYgbikgaWYgKG0gPCBuKSBuICU9IG07IGVsc2UgbSAlPSBuOwogICAgcmV0dXJuIG0gKyBuOwp9Cgp2b2lkIGVneXB0KHVuc2lnbmVkIGxvbmcgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGxvbmcgYikKewogICAgdW5zaWduZWQgbG9uZyBsb25nIGcgPSBnY2QoYSxiKTsKCiAgICBpZiAoZyAhPSAxKSB7IGEvPWc7IGIvPWc7fQoKICAgIGlmIChhID4gYikKICAgIHsKICAgICAgICBjb3V0IDw8IGEvYjsKICAgICAgICBhICU9IGI7CiAgICAgICAgaWYgKGEgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8ICIgKyAiOwogICAgICAgICAgICBlZ3lwdChhLGIpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGEgPT0gMSkKICAgIHsKICAgICAgICBjb3V0IDw8ICIxLyIgPDwgYiA8PCBlbmRsOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbiA9IChiK2EpL2E7CiAgICAgICAgY291dCA8PCAiMS8iIDw8IG4gPDwgIiArICI7CiAgICAgICAgZWd5cHQoYSpuLWIsYipuKTsKICAgIH0KfQoKCgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgZWd5cHQoMTAsNyk7CiAgICBlZ3lwdCgzNywxNSk7CiAgICBlZ3lwdCg0Myw0OCk7CiAgICBlZ3lwdCg1LDEyMSk7Cn0K