<p>You are given an integer <code>num</code>. You will apply the following steps exactly <strong>two</strong> times:</p>

<ul>
	<li>Pick a digit <code>x (0 &lt;= x &lt;= 9)</code>.</li>
	<li>Pick another digit <code>y (0 &lt;= y &lt;= 9)</code>. The digit <code>y</code> can be equal to <code>x</code>.</li>
	<li>Replace all the occurrences of <code>x</code> in the decimal representation of <code>num</code> by <code>y</code>.</li>
	<li>The new integer <strong>cannot</strong> have any leading zeros, also the new integer <strong>cannot</strong> be 0.</li>
</ul>

<p>Let <code>a</code> and <code>b</code> be the results of applying the operations to <code>num</code> the first and second times, respectively.</p>

<p>Return <em>the max difference</em> between <code>a</code> and <code>b</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> num = 555
<strong>Output:</strong> 888
<strong>Explanation:</strong> The first time pick x = 5 and y = 9 and store the new integer in a.
The second time pick x = 5 and y = 1 and store the new integer in b.
We have now a = 999 and b = 111 and max difference = 888
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> num = 9
<strong>Output:</strong> 8
<strong>Explanation:</strong> The first time pick x = 9 and y = 9 and store the new integer in a.
The second time pick x = 9 and y = 1 and store the new integer in b.
We have now a = 9 and b = 1 and max difference = 8
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= num &lt;= 10<sup>8</sup></code></li>
</ul>

class Solution {
public:
    long long replaceBitTo(int num,int bit,int to){
        vector<int> bitList;
        int a = num;
        while(a){
            bitList.insert(bitList.begin() , a%10);
            a/=10;
        }
        int from = bitList[bit];
        for(auto & n:bitList){
            if(n == from){
                n = to;
            }
        }
        long long ret = 0;
        for(auto n:bitList){
            ret = ret*10+n;
        }
        return ret;
    }
    int bits(int num){
        int cnt = 0;
        while(num){
            cnt++;
            num /= 10;
        }
        return cnt;
    }
    int maxDiff(int num) {
        long long a = INT_MIN;
        int N= bits(num);
        for(int i = 0;i < N;++i){
            a = max(a, replaceBitTo(num,i,9));
        }
        printf("a:%lld\n",a);
        long long b = INT_MAX;
        for(int i = 0;i < N;++i){
            if(i == 0){
                b= min(b,replaceBitTo(num,i,1));
            }
            else{
                auto op = replaceBitTo(num,i,0);
                if(bits(op) != N){
                    continue;
                }
                b = min(b,op);
            }
        }
        printf("b:%lld\n",b);
        return a-b;
    }
};
8900