#include <iostream>
#include <vector>
#include <math.h>

bool is_palindrome(int num)
{
	std::vector<int> split_num;
	int max_exp = log10(num);
	int current_num = num;
	for (int e = max_exp; e >= 0; e--)
	{
		int power = (int)pow(10, e);
		split_num.push_back(current_num / power);
		current_num = current_num % power;
	}
	int length = split_num.size();
	for (int i = 0; i < length / 2; i++)
		if (split_num[i] != split_num[length - 1 - i])
			return false;
	return true;
}

int main() {
	int max = 0;
	for (int i = 1000; i <= 9999; i++)
		for (int j = i; j <= 9999; j++) // wow! such optimization
		{
			int num = i * j;
			if (is_palindrome(num))
				if (num > max)
					max = num;
		}
	std::cout << max;
	return 0;
}