# include <stdio.h> # include <inttypes.h> uint_least16_t binrev (uint_least16_t n) { uint_least16_t r = 0; while (n) { r <<= 1; r |= n & 1; n >>= 1; } return r; } int main (void) { uint_least16_t n; scanf ("%" SCNuLEAST16, & n); uint_least16_t k = 1; uint_least32_t m = 1; uint_least8_t p = 0; _Bool odd = 1; while (m < n) { m += k; odd = m < n; k <<= 1; m += k; p++; } n -= k - 1; printf ("%" PRIuLEAST64 "\n", ((uint_least64_t) n << p) + binrev (n >> odd)); }