#include <iostream>
using namespace std;
const int MAX_DIGIT = 5;
inline bool is_used(int number, int used)
{
return 1 & (used >> number);
}
inline void set_used(int number, int &used)
{
used |= 1 << number;
}
inline void unset_used(int number, int &used)
{
used &= ~(1 << number);
}
void find_magic_number(int number, int digit, int used)
{
if (digit == MAX_DIGIT) {
int reverse_number = 0;
for (int i = 0, k = 1; i < MAX_DIGIT; ++i, k *= 10) {
reverse_number *= 10;
reverse_number += number / k % 10;
}
if (number * 4 == reverse_number) {
cout << number << " * 4 == " << reverse_number << endl;
}
return;
}
for (int i = 0; i < 10; ++i) {
if (!is_used(i, used)) {
int new_number = number * 10 + i;
set_used(i, used);
find_magic_number(new_number, digit + 1, used);
unset_used(i, used);
}
}
}
int main()
{
find_magic_number(0, 0, 0);
return 0;
}