Really nice proof!

To make the post easier to understand:

f(X) = 10^(lgX + 1) means that f(X) is the number of digits in number X, e.g. f(1) = 1, f(9) = 1, f(10) = 2

The post also didn't strictly distinguish between "string concatenation" and "multiplication", e.g.

"then XY = f(Y)X + Y" means:

concat(X,Y) = f(Y) * X + Y

The main idea of second proof is:

When you have a sorted sequence A, B, C, D, ..., then A must be the first part of the largest number. This can be proved by contradiction:

If A is not the first part of the largest number, then the largest number would be something like X....XAX....X (X represents other numbers). You can obtain a number no smaller than itself by swapping A with the number preceding it. You can continue this process until A becomes the first part of the number, and this number is larger than "the largest number", leading to a contradiction. (Note that the last swap that make A the first part of the number guarantees to increase the number, because the assumption "A is not the first part of the largest number")