#include <iostream>
#include <cstdint>
using namespace std;
uint64_t sequence(uint64_t A, uint64_t B, size_t n) {
if (n == 0) {
return A;
}
uint64_t prev[2] = {A, B};
for (size_t it = 1u; it < n; ++it) {
uint64_t next =
(prev[0] > prev[1]) ?
(prev[0] - prev[1]) :
(prev[1] - prev[0]);
if (next == 0) {
size_t remaining = n - it - 1;
if (remaining % 3 == 0) {
return 0;
}
return prev[0];
}
prev[0] = prev[1];
prev[1] = next;
}
return prev[1];
}
uint64_t sequence_control(uint64_t A, uint64_t B, size_t n) {
if (n == 0) {
return A;
}
uint64_t prev[2] = {A, B};
for (size_t it = 1u; it < n; ++it) {
uint64_t next =
(prev[0] > prev[1]) ?
(prev[0] - prev[1]) :
(prev[1] - prev[0]);
prev[0] = prev[1];
prev[1] = next;
}
return prev[1];
}
int main(int, char **) {
uint64_t a = 211;
uint64_t b = 9935;
for (size_t n = 0; n < 10000; ++n) {
auto s = sequence(a,b,n);
auto c = sequence_control(a,b,n);
if (c != s) {
cout << a << "|" << b << " " << n << ": c = " << c << " s = " << s << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGludD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVpbnQ2NF90IHNlcXVlbmNlKHVpbnQ2NF90IEEsIHVpbnQ2NF90IEIsIHNpemVfdCBuKSB7CiBpZiAobiA9PSAwKSB7CiAgcmV0dXJuIEE7CiB9CiB1aW50NjRfdCBwcmV2WzJdID0ge0EsIEJ9OwogZm9yIChzaXplX3QgaXQgPSAxdTsgaXQgPCBuOyArK2l0KSB7CiAgdWludDY0X3QgbmV4dCA9CiAgICAocHJldlswXSA+IHByZXZbMV0pID8KICAgICAgKHByZXZbMF0gLSBwcmV2WzFdKSA6CiAgICAgIChwcmV2WzFdIC0gcHJldlswXSk7CiAgaWYgKG5leHQgPT0gMCkgewogICBzaXplX3QgcmVtYWluaW5nID0gbiAtIGl0IC0gMTsKICAgaWYgKHJlbWFpbmluZyAlIDMgPT0gMCkgewogICAgcmV0dXJuIDA7CiAgIH0KICAgcmV0dXJuIHByZXZbMF07CiAgfQogIHByZXZbMF0gPSBwcmV2WzFdOwogIHByZXZbMV0gPSBuZXh0OwogfQogcmV0dXJuIHByZXZbMV07Cn0KCnVpbnQ2NF90IHNlcXVlbmNlX2NvbnRyb2wodWludDY0X3QgQSwgdWludDY0X3QgQiwgc2l6ZV90IG4pIHsKIGlmIChuID09IDApIHsKICByZXR1cm4gQTsKIH0KIHVpbnQ2NF90IHByZXZbMl0gPSB7QSwgQn07CiBmb3IgKHNpemVfdCBpdCA9IDF1OyBpdCA8IG47ICsraXQpIHsKICB1aW50NjRfdCBuZXh0ID0KICAgIChwcmV2WzBdID4gcHJldlsxXSkgPwogICAgICAocHJldlswXSAtIHByZXZbMV0pIDoKICAgICAgKHByZXZbMV0gLSBwcmV2WzBdKTsKICBwcmV2WzBdID0gcHJldlsxXTsKICBwcmV2WzFdID0gbmV4dDsKIH0KIHJldHVybiBwcmV2WzFdOwp9CgoKaW50IG1haW4oaW50LCBjaGFyICoqKSB7CiB1aW50NjRfdCBhID0gMjExOwogdWludDY0X3QgYiA9IDk5MzU7CiBmb3IgKHNpemVfdCBuID0gMDsgbiA8IDEwMDAwOyArK24pIHsKICBhdXRvIHMgPSBzZXF1ZW5jZShhLGIsbik7CiAgYXV0byBjID0gc2VxdWVuY2VfY29udHJvbChhLGIsbik7CiAgaWYgKGMgIT0gcykgewogICBjb3V0IDw8IGEgPDwgInwiIDw8IGIgPDwgIiAgIiA8PCBuIDw8ICI6IGMgPSAiIDw8IGMgPDwgIiAgcyA9ICIgPDwgcyA8PCBlbmRsOwogIH0KIH0KIHJldHVybiAwOwp9