text: # Problem In Walrusland public transport tickets are characterized by two integers: by the number of the series and by the number of the ticket in the series.Let the series number be represented by a and the ticket number — by b, then a ticket is described by the ordered pair of numbers (a, b).The walruses believe that a ticket is lucky if a * b = rev(a) * rev(b).The function rev(x) reverses a number written in the decimal system, at that the leading zeroes disappear.For example, rev(12343) = 34321, rev(1200) = 21.The Public Transport Management Committee wants to release x series, each containing y tickets, so that at least w lucky tickets were released and the total number of released tickets (x * y) were minimum.The series are numbered from 1 to x inclusive.The tickets in each series are numbered from 1 to y inclusive.The Transport Committee cannot release more than maxx series and more than maxy tickets in one series.Input The first line contains three integers maxx, maxy, w (1 ≤ maxx, maxy ≤ 105, 1 ≤ w ≤ 107).Output Print on a single line two space-separated numbers, the x and the y.If there are several possible variants, print any of them.If such x and y do not exist, print a single number - 1.Examples Input 2 2 1 Output 1 1 Input 132 10 35 Output 7 5 Input 5 18 1000 Output -1 Input 48 132 235 Output 22 111 # Solution #include <bits/stdc++.h> using namespace std; int in() { int a; scanf("%d", &a); return a; } int gcm(int a, int b) { if (b > a) return gcm(b, a); if (a % b == 0) return b; else return gcm(b, a % b); } int calc_rev(int x) { int ret = 0; while (x) { int a = x % 10; ret = ret * 10 + a; x /= 10; } return ret; } int rev[100010]; map<pair<int, int>, vector<int> > lucky; pair<int, int> a_reva(int a) { int g = gcm(a, rev[a]); int b = a / g; int c = rev[a] / g; return make_pair(b, c); } pair<int, int> invert_pint(pair<int, int> t) { return make_pair(t.second, t.