#include <iostream>
#include <map>
#include <vector>
#include <cmath>
using namespace std;
int magic(map<char, int> &v, const string str) // arvutab s6na arvulise v22rtuse
{
int sum = 0, i = 0;
for (auto it = str.rbegin(); it != str.rend(); ++it, ++i)
{
sum += pow(10, i) * v[*it];
}
return sum;
}
bool unique(map<char, int> &v) // kontrollib kas k6ik numbrid on unikaalsed
{
for (auto it1 = v.begin(); it1 != v.end(); ++it1)
{
auto it2 = it1;
++it2;
for (;it2 != v.end(); ++it2)
{
if (it1->second == it2->second)
{
return false;
}
}
}
return true;
}
int main()
{
map<char, int> v;
for (char c : string("KRONAFRANK")) // lisab kasutatavad t2hed
{
v[c] = 0;
}
bool end = false;
while (!end)
{
if ((3 * magic(v, "KRONA") == magic(v, "FRANK")) && unique(v)) // kontrollib lahendust
{
for (auto p : v)
{
cout << p.first << ":" << p.second << "; ";
}
cout << endl;
}
v.begin()->second++; // suurendab esimest numbrit
for (auto it = v.begin(); it != v.end(); ++it)
{
if (it->second > 9) // carry
{
auto it2 = it;
it2++;
if (it2 != v.end())
{
it->second = 0;
it2->second++;
}
else // l6petamine
{
end = true;
}
}
else
{
break;
}
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y21hdGg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1hZ2ljKG1hcDxjaGFyLCBpbnQ+ICZ2LCBjb25zdCBzdHJpbmcgc3RyKSAvLyBhcnZ1dGFiIHM2bmEgYXJ2dWxpc2UgdjIycnR1c2UKewogICAgaW50IHN1bSA9IDAsIGkgPSAwOwogICAgZm9yIChhdXRvIGl0ID0gc3RyLnJiZWdpbigpOyBpdCAhPSBzdHIucmVuZCgpOyArK2l0LCArK2kpCiAgICB7CiAgICAgICAgc3VtICs9IHBvdygxMCwgaSkgKiB2WyppdF07CiAgICB9CiAgICByZXR1cm4gc3VtOwp9Cgpib29sIHVuaXF1ZShtYXA8Y2hhciwgaW50PiAmdikgLy8ga29udHJvbGxpYiBrYXMgazZpayBudW1icmlkIG9uIHVuaWthYWxzZWQKewogICAgZm9yIChhdXRvIGl0MSA9IHYuYmVnaW4oKTsgaXQxICE9IHYuZW5kKCk7ICsraXQxKQogICAgewogICAgICAgIGF1dG8gaXQyID0gaXQxOwogICAgICAgICsraXQyOwogICAgICAgIGZvciAoO2l0MiAhPSB2LmVuZCgpOyArK2l0MikKICAgICAgICB7CiAgICAgICAgICAgIGlmIChpdDEtPnNlY29uZCA9PSBpdDItPnNlY29uZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmludCBtYWluKCkKewogICAgbWFwPGNoYXIsIGludD4gdjsKICAgIGZvciAoY2hhciBjIDogc3RyaW5nKCJLUk9OQUZSQU5LIikpIC8vIGxpc2FiIGthc3V0YXRhdmFkIHQyaGVkCiAgICB7CiAgICAgICAgdltjXSA9IDA7CiAgICB9CgogICAgYm9vbCBlbmQgPSBmYWxzZTsKICAgIHdoaWxlICghZW5kKQogICAgewogICAgICAgIGlmICgoMyAqIG1hZ2ljKHYsICJLUk9OQSIpID09IG1hZ2ljKHYsICJGUkFOSyIpKSAmJiB1bmlxdWUodikpIC8vIGtvbnRyb2xsaWIgbGFoZW5kdXN0CiAgICAgICAgewogICAgICAgICAgICBmb3IgKGF1dG8gcCA6IHYpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgcC5maXJzdCA8PCAiOiIgPDwgcC5zZWNvbmQgPDwgIjsgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICAgICAgfQoKICAgICAgICB2LmJlZ2luKCktPnNlY29uZCsrOyAvLyBzdXVyZW5kYWIgZXNpbWVzdCBudW1icml0CiAgICAgICAgZm9yIChhdXRvIGl0ID0gdi5iZWdpbigpOyBpdCAhPSB2LmVuZCgpOyArK2l0KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPiA5KSAvLyBjYXJyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhdXRvIGl0MiA9IGl0OwogICAgICAgICAgICAgICAgaXQyKys7CiAgICAgICAgICAgICAgICBpZiAoaXQyICE9IHYuZW5kKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaXQtPnNlY29uZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaXQyLT5zZWNvbmQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgLy8gbDZwZXRhbWluZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVuZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9Cg==