#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.0, 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;
string str("KRONAFRANK");
for (int i = 0; i < str.size(); i++) // lisab kasutatavad t2hed
{
v[str[i]] = 0;
}
bool end = false;
while (!end)
{
if ((3 * magic(v, "KRONA") == magic(v, "FRANK")) && unique(v)) // kontrollib lahendust
{
for (auto it = v.begin(); it != v.end(); ++it)
{
cout << it->first << ":" << it->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+ICZ2LCBjb25zdCBzdHJpbmcgc3RyKSAvLyBhcnZ1dGFiIHM2bmEgYXJ2dWxpc2UgdjIycnR1c2UKewogICAgaW50IHN1bSA9IDAsIGkgPSAwOwogICAgZm9yIChhdXRvIGl0ID0gc3RyLnJiZWdpbigpOyBpdCAhPSBzdHIucmVuZCgpOyArK2l0LCArK2kpCiAgICB7CiAgICAgICAgc3VtICs9IHBvdygxMC4wLCBpKSAqIHZbKml0XTsKICAgIH0KICAgIHJldHVybiBzdW07Cn0KCmJvb2wgdW5pcXVlKG1hcDxjaGFyLCBpbnQ+ICZ2KSAvLyBrb250cm9sbGliIGthcyBrNmlrIG51bWJyaWQgb24gdW5pa2FhbHNlZAp7CiAgICBmb3IgKGF1dG8gaXQxID0gdi5iZWdpbigpOyBpdDEgIT0gdi5lbmQoKTsgKytpdDEpCiAgICB7CiAgICAgICAgYXV0byBpdDIgPSBpdDE7CiAgICAgICAgKytpdDI7CiAgICAgICAgZm9yICg7aXQyICE9IHYuZW5kKCk7ICsraXQyKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGl0MS0+c2Vjb25kID09IGl0Mi0+c2Vjb25kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKaW50IG1haW4oKQp7CiAgICBtYXA8Y2hhciwgaW50PiB2OwogICAgc3RyaW5nIHN0cigiS1JPTkFGUkFOSyIpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHIuc2l6ZSgpOyBpKyspIC8vIGxpc2FiIGthc3V0YXRhdmFkIHQyaGVkCiAgICB7CiAgICAgICAgdltzdHJbaV1dID0gMDsKICAgIH0KCiAgICBib29sIGVuZCA9IGZhbHNlOwogICAgd2hpbGUgKCFlbmQpCiAgICB7CiAgICAgICAgaWYgKCgzICogbWFnaWModiwgIktST05BIikgPT0gbWFnaWModiwgIkZSQU5LIikpICYmIHVuaXF1ZSh2KSkgLy8ga29udHJvbGxpYiBsYWhlbmR1c3QKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHYuYmVnaW4oKTsgaXQgIT0gdi5lbmQoKTsgKytpdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY291dCA8PCBpdC0+Zmlyc3QgPDwgIjoiIDw8IGl0LT5zZWNvbmQgPDwgIjsgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICAgICAgfQoKICAgICAgICB2LmJlZ2luKCktPnNlY29uZCsrOyAvLyBzdXVyZW5kYWIgZXNpbWVzdCBudW1icml0CiAgICAgICAgZm9yIChhdXRvIGl0ID0gdi5iZWdpbigpOyBpdCAhPSB2LmVuZCgpOyArK2l0KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPiA5KSAvLyBjYXJyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhdXRvIGl0MiA9IGl0OwogICAgICAgICAgICAgICAgaXQyKys7CiAgICAgICAgICAgICAgICBpZiAoaXQyICE9IHYuZW5kKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaXQtPnNlY29uZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaXQyLT5zZWNvbmQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgLy8gbDZwZXRhbWluZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVuZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9Cg==