#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <functional>
const int e_key = 47;
const int d_key = 15;
const int n = 391;
struct do_crypt : std::binary_function<int, int, int> {
int operator()(int input, int key) const {
int result = 1;
for (int i=0; i<key; i++) {
result *= input;
result %= n;
}
return result;
}
};
int main() {
std::string msg = "Drink more Ovaltine.";
std::vector<int> encrypted;
std::transform(msg.begin(), msg.end(),
std::back_inserter(encrypted),
std::bind2nd(do_crypt(), e_key));
std::transform(encrypted.begin(), encrypted.end(),
std::ostream_iterator<char>(std::cout, ""),
std::bind2nd(do_crypt(), d_key));
std::cout << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgoKY29uc3QgaW50IGVfa2V5ID0gNDc7CmNvbnN0IGludCBkX2tleSA9IDE1Owpjb25zdCBpbnQgbiA9IDM5MTsKCnN0cnVjdCBkb19jcnlwdCA6IHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPGludCwgaW50LCBpbnQ+IHsKICAgIGludCBvcGVyYXRvcigpKGludCBpbnB1dCwgaW50IGtleSkgY29uc3QgeyAKICAgICAgICBpbnQgcmVzdWx0ID0gMTsKICAgICAgICBmb3IgKGludCBpPTA7IGk8a2V5OyBpKyspIHsKICAgICAgICAgICAgcmVzdWx0ICo9IGlucHV0OwogICAgICAgICAgICByZXN1bHQgJT0gbjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgc3RkOjpzdHJpbmcgbXNnID0gIkRyaW5rIG1vcmUgT3ZhbHRpbmUuIjsKICAgIHN0ZDo6dmVjdG9yPGludD4gZW5jcnlwdGVkOwoKICAgIHN0ZDo6dHJhbnNmb3JtKG1zZy5iZWdpbigpLCBtc2cuZW5kKCksICAKICAgICAgICBzdGQ6OmJhY2tfaW5zZXJ0ZXIoZW5jcnlwdGVkKSwKICAgICAgICBzdGQ6OmJpbmQybmQoZG9fY3J5cHQoKSwgZV9rZXkpKTsKCiAgICBzdGQ6OnRyYW5zZm9ybShlbmNyeXB0ZWQuYmVnaW4oKSwgZW5jcnlwdGVkLmVuZCgpLCAKICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8Y2hhcj4oc3RkOjpjb3V0LCAiIiksIAogICAgICAgIHN0ZDo6YmluZDJuZChkb19jcnlwdCgpLCBkX2tleSkpOwogICAgc3RkOjpjb3V0IDw8ICJcbiI7CgogICAgcmV0dXJuIDA7Cn0K