#include <iostream>
#include <vector>
#include <stdint.h>
constexpr uint64_t do_the_hash(const char* input, uint64_t value_so_far) {
return *input ? do_the_hash(input + 1, (value_so_far << 8) | *input) : value_so_far;
}
constexpr uint64_t hash_metafunction(const char* input) {
return do_the_hash(input, 0);
}
int main()
{
std::cout << std::hex;
std::cout << hash_metafunction("a") << std::endl;
std::cout << hash_metafunction("ab") << std::endl;
std::cout << hash_metafunction("abc") << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RkaW50Lmg+Cgpjb25zdGV4cHIgdWludDY0X3QgZG9fdGhlX2hhc2goY29uc3QgY2hhciogaW5wdXQsIHVpbnQ2NF90IHZhbHVlX3NvX2ZhcikgewogICAgcmV0dXJuICppbnB1dCA/IGRvX3RoZV9oYXNoKGlucHV0ICsgMSwgKHZhbHVlX3NvX2ZhciA8PCA4KSB8ICppbnB1dCkgOiB2YWx1ZV9zb19mYXI7Cn0KCgpjb25zdGV4cHIgdWludDY0X3QgaGFzaF9tZXRhZnVuY3Rpb24oY29uc3QgY2hhciogaW5wdXQpIHsKICAgIHJldHVybiBkb190aGVfaGFzaChpbnB1dCwgMCk7Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpjb3V0IDw8IHN0ZDo6aGV4OwogICAgc3RkOjpjb3V0IDw8IGhhc2hfbWV0YWZ1bmN0aW9uKCJhIikgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IGhhc2hfbWV0YWZ1bmN0aW9uKCJhYiIpIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCBoYXNoX21ldGFmdW5jdGlvbigiYWJjIikgPDwgc3RkOjplbmRsOwp9Cg==