<p>You are given a <strong>0-indexed</strong> integer array <code>nums</code> and an integer <code>value</code>.</p>

<p>In one operation, you can add or subtract <code>value</code> from any element of <code>nums</code>.</p>

<ul>
	<li>For example, if <code>nums = [1,2,3]</code> and <code>value = 2</code>, you can choose to subtract <code>value</code> from <code>nums[0]</code> to make <code>nums = [-1,2,3]</code>.</li>
</ul>

<p>The MEX (minimum excluded) of an array is the smallest missing <strong>non-negative</strong> integer in it.</p>

<ul>
	<li>For example, the MEX of <code>[-1,2,3]</code> is <code>0</code> while the MEX of <code>[1,0,3]</code> is <code>2</code>.</li>
</ul>

<p>Return <em>the maximum MEX of </em><code>nums</code><em> after applying the mentioned operation <strong>any number of times</strong></em>.</p>

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

<pre>
<strong>Input:</strong> nums = [1,-10,7,13,6,8], value = 5
<strong>Output:</strong> 4
<strong>Explanation:</strong> One can achieve this result by applying the following operations:
- Add value to nums[1] twice to make nums = [1,<strong><u>0</u></strong>,7,13,6,8]
- Subtract value from nums[2] once to make nums = [1,0,<strong><u>2</u></strong>,13,6,8]
- Subtract value from nums[3] twice to make nums = [1,0,2,<strong><u>3</u></strong>,6,8]
The MEX of nums is 4. It can be shown that 4 is the maximum MEX we can achieve.
</pre>

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

<pre>
<strong>Input:</strong> nums = [1,-10,7,13,6,8], value = 7
<strong>Output:</strong> 2
<strong>Explanation:</strong> One can achieve this result by applying the following operation:
- subtract value from nums[2] once to make nums = [1,-10,<u><strong>0</strong></u>,13,6,8]
The MEX of nums is 2. It can be shown that 2 is the maximum MEX we can achieve.
</pre>

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

<ul>
	<li><code>1 &lt;= nums.length, value &lt;= 10<sup>5</sup></code></li>
	<li><code>-10<sup>9</sup> &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
</ul>

from collections import Counter
from typing import List

class Solution:
    def findSmallestInteger(self, nums: List[int], value: int) -> int:
        # Step 1: Create a counter for the remainders of each number in nums when divided by value
        ctr = Counter(map(lambda x: x % value, nums))
        
        # Step 2: Find the key with the minimum value in the counter
        # In case of a tie, the smallest key is chosen
        mn = min((n for n in range(value)), key=lambda x: (ctr[x], x))
        
        # Step 3: Calculate the smallest non-negative integer that is not possible to create
        return mn + value * ctr[mn]

# Explanation with example nums = [7, 7, 7, 4, 6, 8], value = 5:
# 1. Calculate remainders when each number in nums is divided by value:
#    remainders = [7 % 5, 7 % 5, 7 % 5, 4 % 5, 6 % 5, 8 % 5] => [2, 2, 2, 4, 1, 3]
# 2. Create a Counter object to count occurrences of each remainder:
#    ctr = Counter([2, 2, 2, 4, 1, 3]) => {2: 3, 4: 1, 1: 1, 3: 1}
# 3. Find the remainder with the minimum count:
#    mn = min((n for n in range(5)), key=lambda x: (ctr[x], x)) => mn = 0
#    (because 0 is not present in the counter, ctr[0] is 0, which is the smallest count)
# 4. Calculate the smallest non-negative integer that is not possible to create:
#    result = mn + value * ctr[mn] => 0 + 5 * 0 => 0
#    Therefore, the smallest non-negative integer that cannot be created is 0.
712