<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:
    int maxDiff(int num) {
        int exp = 0;
        int temp = num;
        int digit = 0;
        stack<int> sa;
        stack<int> sb;

        while (temp != 0) {
            digit = temp % 10;
            temp /= 10;
            exp++;
            sa.push(digit);
            sb.push(digit);
        }
        if (exp == 1) {
            return 8;
        }
        int aDig = digit;
        int bDig = digit;
        while (!sa.empty()) {
            if (sa.top() == 9){
                sa.pop();
            }
            else {
                aDig = sa.top();
                break;
            }
        }
        
        while (!sb.empty()) {
            if (sb.top() == 1 || sb.top() == 0) {
                sb.pop();
            }
            else {
                bDig = sb.top();
                break;
            }
        }
        int bNum = 1;
        if (sb.size() < exp && sb.size() != 0) {
            bNum = 0;
        }

        int a = num;
        temp = a;
        int aDigit = 0;
        int aExp = 0;
        while (temp != 0) {
            aDigit = temp % 10; 
            temp /= 10;
            if (aDigit == aDig) {
                a += (9 - aDig) * pow(10, (aExp));
            }
            aExp++;
        }
        int b = num;
        temp = b;
        int bDigit = 0;
        int bExp = 0;
        while (temp != 0) {
            bDigit = temp % 10; 
            temp /= 10;
            if (bDigit == bDig) {
                b -= (bDig - bNum) * pow(10, (bExp));
            }
            bExp++;
        }
        cout << num << "\n";
        cout << a << "\n" << b << "\n";
        return a - b; 
    }
};


8300