#include #include #include #include #include #include #define MAX 100000 using namespace std; typedef long long ll; typedef pair lp; lp f(ll p, ll q){ if(p > q) { // maybe needless swap(p,q); } if(p != 0){ // p <= q // get min(|2xp-q|) ll tmp = p*2; ll x = p/tmp; // <=> 2xp-q == 0 ll ans = min((ll)abs(x*tmp-q),(ll)abs((x+1)*tmp-q)); // min is x or x+1 lp result; if(ans <= p){ result.first = ans; result.second = p; } else { result.first = p; result.second = q; } return result; } else{ lp result; result.first = p; result.second = q; return result; } } int main(){ ll p,q; cin >> p >> q; if(p > q) { // always p<=q swap(p,q); } int n; cin >> n; lp* children = new lp[n]; for(int i=0; i> tmp; pos.first = (ll)abs(tmp); cin >> tmp; pos.second = (ll)abs(tmp); children[i] = pos; } lp pos; pos.first = p; pos.second = q; while(true){ pos = f(pos.first, pos.second); if(pos.first <= 0 || pos.first == pos.second){ break; } } int result = 0; if(pos.first == 0 && pos.second == 0){ for(int i=0; i