#include <stdio.h>
	#include <stdlib.h>
	#include <string.h>
	#include <stdbool.h>
	#include <math.h>

	#define same_digits(x, y)   num_digits(x) == num_digits(y) ? 1 : 0

	typedef struct arguments {
		long int min;
		long int max;
	} Args;

	short num_digits(long int num) {
		short count = 0;
		while (num != 0) {
			num /= 10;
			++count;
		}
		return count;
	}

	bool is_palindrome(long int num) {
		short digits = num_digits(num); 
		char buffer[digits + 1];
		sprintf(buffer, "%ld", num);
		int i;
		size_t len = strlen(buffer);
		char *reversed = NULL;
		reversed = calloc(digits + 1, sizeof(char));
		for (i = len - 1; i >= 0; i--)
			reversed[len - 1 - i] = buffer[i];
		long int new_num;
		int n = sscanf(reversed, "%ld", &new_num);
		free(reversed);
		if (n == 1 && num == new_num) {
			return true;
		}
		return false;
	}

	void *largest(void *arg) {
		Args *args = (Args *) arg;
		long int min = args->min;
		long int max = args->max;
		long int i, j;
		for (i = max; i >= min; i--) {
			if (is_palindrome(i) == false)
				continue;
			int root = (int) sqrt(i);
			for (j = 2; j <= root; j++) {
				if (i % j == 0) {
					if (same_digits(j, (i/j))) {
						printf("%ld\t*\t%ld\t=\t%ld\n", j, (i/j), i);
						return NULL;
					}
				}
			}
		}
		return NULL;
	}

	int main(void) {
		int num;
		while (fscanf(stdin, "%d", &num) == 1) {
			if (num == 1) {
				Args *arguments = NULL;
				arguments = calloc(1, sizeof(Args));
				arguments->min = 1;
				arguments->max = 10;
				largest((void *) arguments);
				free(arguments);
			} else {
				long int min = pow(10, (num * 2) - 1);
				long int max = pow(10, (num * 2));
				Args *args = NULL;
				args = calloc(1, sizeof(Args));
				args->min = min;
				args->max = max;
				largest((void *) args);
			}
		}
		return EXIT_SUCCESS;
	}