<p>Given an array of integers <code>arr</code> of even length <code>n</code> and an integer <code>k</code>.</p>

<p>We want to divide the array into exactly <code>n / 2</code> pairs such that the sum of each pair is divisible by <code>k</code>.</p>

<p>Return <code>true</code><em> If you can find a way to do that or </em><code>false</code><em> otherwise</em>.</p>

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

<pre>
<strong>Input:</strong> arr = [1,2,3,4,5,10,6,7,8,9], k = 5
<strong>Output:</strong> true
<strong>Explanation:</strong> Pairs are (1,9),(2,8),(3,7),(4,6) and (5,10).
</pre>

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

<pre>
<strong>Input:</strong> arr = [1,2,3,4,5,6], k = 7
<strong>Output:</strong> true
<strong>Explanation:</strong> Pairs are (1,6),(2,5) and(3,4).
</pre>

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

<pre>
<strong>Input:</strong> arr = [1,2,3,4,5,6], k = 10
<strong>Output:</strong> false
<strong>Explanation:</strong> You can try all possible pairs to see that there is no way to divide arr into 3 pairs each with sum divisible by 10.
</pre>

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

<ul>
	<li><code>arr.length == n</code></li>
	<li><code>1 &lt;= n &lt;= 10<sup>5</sup></code></li>
	<li><code>n</code> is even.</li>
	<li><code>-10<sup>9</sup> &lt;= arr[i] &lt;= 10<sup>9</sup></code></li>
	<li><code>1 &lt;= k &lt;= 10<sup>5</sup></code></li>
</ul>

class Solution:
    def canArrange(self, arr: List[int], k: int) -> bool:
      d = dict()
      for i in range(len(arr)):
        if arr[i] >= 0:
          if (arr[i] % k) in d:
            d[arr[i] % k] += 1
          else:
            d[arr[i] % k] = 1
        else:
          if -(-arr[i] % k) in d:
            d[-(-arr[i] % k)] += 1
          else:
            d[-(-arr[i] % k)] = 1
      print(d.keys(), d)
      for num in d.keys():
        if not d[num]:
          continue
        if num == 0 and d[num] % 2 != 0:
            return False
        if num == 0:
            continue
        alt = k - num if num > 0 else -(k - abs(num))
        while d[num] > 0:
          if d.get(-num, 0) > 0:
            d[num] -= 1
            d[-num] -= 1
          elif d.get(alt, 0) > 0:
            d[num] -= 1
            d[alt] -= 1
          if d.get(-num, 0) == 0 and d.get(alt, 0) == 0 and d[num] != 0:
            return False
      print(d)
      return True
32900