#include <iostream>
using namespace std;
long g(int n, int l, int mid, int r, int fromL, int turns){
long right = 0;
long left = 0;
if (mid + r <= n)
right = g(n, mid, mid + r, r, 1, turns + (1^fromL));
if (mid + l <= n)
left = g(n, l, mid + l, mid, 0, turns + fromL);
// Multiples
int k = n / mid;
// This subtree is rooted at 2/3
return 4 * k * turns + left + right;
}
long f(int n) {
// 1/1, 2/2, 3/3 etc.
long total = n;
// 1/2, 2/4, 3/6 etc.
if (n > 1)
total += 3 * (n >> 1);
if (n > 2)
// Technically 3 turns for 2/3 but
// we can avoid a subtraction
// per call by starting with 2. (I
// guess that means it's probably
// another subtree, but I haven't
// thought it through.)
total += g(n, 2, 3, 1, 1, 2);
return total;
}
int main() {
cout << f(10000);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmxvbmcgZyhpbnQgbiwgaW50IGwsIGludCBtaWQsIGludCByLCBpbnQgZnJvbUwsIGludCB0dXJucyl7CiAgbG9uZyByaWdodCA9IDA7CiAgbG9uZyBsZWZ0ID0gMDsKICAgICAgICAKICBpZiAobWlkICsgciA8PSBuKQogICAgcmlnaHQgPSBnKG4sIG1pZCwgbWlkICsgciwgciwgMSwgdHVybnMgKyAoMV5mcm9tTCkpOwogICAgICAgICAgCiAgaWYgKG1pZCArIGwgPD0gbikKICAgIGxlZnQgPSBnKG4sIGwsIG1pZCArIGwsIG1pZCwgMCwgdHVybnMgKyBmcm9tTCk7CiAgICAKICAvLyBNdWx0aXBsZXMKICBpbnQgayA9IG4gLyBtaWQ7CgogIC8vIFRoaXMgc3VidHJlZSBpcyByb290ZWQgYXQgMi8zCiAgcmV0dXJuIDQgKiBrICogdHVybnMgKyBsZWZ0ICsgcmlnaHQ7Cn0KCgpsb25nIGYoaW50IG4pIHsgIAogIC8vIDEvMSwgMi8yLCAzLzMgZXRjLgogIGxvbmcgdG90YWwgPSBuOwogICAgICAKICAvLyAxLzIsIDIvNCwgMy82IGV0Yy4KICBpZiAobiA+IDEpCiAgICB0b3RhbCArPSAzICogKG4gPj4gMSk7CiAgICAgICAgCiAgaWYgKG4gPiAyKQogIC8vIFRlY2huaWNhbGx5IDMgdHVybnMgZm9yIDIvMyBidXQKICAvLyB3ZSBjYW4gYXZvaWQgYSBzdWJ0cmFjdGlvbgogIC8vIHBlciBjYWxsIGJ5IHN0YXJ0aW5nIHdpdGggMi4gKEkKICAvLyBndWVzcyB0aGF0IG1lYW5zIGl0J3MgcHJvYmFibHkgCiAgLy8gYW5vdGhlciBzdWJ0cmVlLCBidXQgSSBoYXZlbid0CiAgLy8gdGhvdWdodCBpdCB0aHJvdWdoLikKICAgIHRvdGFsICs9IGcobiwgMiwgMywgMSwgMSwgMik7CiAgICAKICByZXR1cm4gdG90YWw7Cn0KCgppbnQgbWFpbigpIHsKICBjb3V0IDw8IGYoMTAwMDApOwoKICByZXR1cm4gMDsKfQ==