You are to find all pairs of integers such that their sum is equal to the given integer number N and the second number results from the first one by striking out one of its digits. The first integer always has at least two digits and starts with a non-zero digit. The second integer always has one digit less than the first integer and may start with a zero digit. Input The input file consists of several test cases. Each test case contains single integer N (10 ≤ N ≤ 10^9), as decribed above Output The output consists of several blocks, one for each test case. On the first line of a block write the total number of different pairs of integers that satisfy the problem statement. On the following lines write all those pairs. Write one pair on a line in ascending order of the first integer in the pair. Each pair must be written in the following format: X + Y = N Here X, Y, and N, must be replaced with the corresponding integer numbers. There should be exactly one space on both sides of ‘+’ and ‘=’ characters. Sample Input 302 Sample Output 5 251 + 51 = 302 275 + 27 = 302 276 + 26 = 302 281 + 21 = 302 301 + 01 = 302
voidCompute(){ for (longlong i = 1; i <= N; i *= 10) { int a = (N / i) / 11; int b = (N / i) % 11; int c; if (b < 10) { c = (N - N / i * i) / 2; if (Verify) { UpdateAns(10 * a * i + b * i + c); } } --b; if (a + b && b >= 0) { c = (N - N / i * i + i) / 2; if (Verify) { UpdateAns(10 * a * i + b * i + c); } } } }
inlinevoidOutputZero(int X){
int Tail = 0; int Y = N - X; while (X) { X /= 10; ++Tail; } if (!Y) { --Tail; } while (Y) { Y /= 10; --Tail; } while (--Tail) { putchar('0'); } }
voidOutput(const vector<int>&Ans){ printf("%d\n", Ans.size()); for (auto it = Ans.cbegin(); it != Ans.cend(); ++it) { printf("%d + ", *it); OutputZero(*it); printf("%d = %d\n", N - *it, N); } }
intmain(){
while (cin >> N) { Compute(); vector<int> ve; for (auto it = Ans.begin(); it != Ans.end(); ++it) { ve.push_back(*it); } sort(ve.begin(), ve.end(), [](int& x,int& y) {return x < y; }); Output(ve); Ans.clear(); }