<p>You are given two <strong>0-indexed</strong> strings <code>word1</code> and <code>word2</code>.</p>

<p>A <strong>move</strong> consists of choosing two indices <code>i</code> and <code>j</code> such that <code>0 &lt;= i &lt; word1.length</code> and <code>0 &lt;= j &lt; word2.length</code> and swapping <code>word1[i]</code> with <code>word2[j]</code>.</p>

<p>Return <code>true</code> <em>if it is possible to get the number of distinct characters in</em> <code>word1</code> <em>and</em> <code>word2</code> <em>to be equal with <strong>exactly one</strong> move. </em>Return <code>false</code> <em>otherwise</em>.</p>

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

<pre>
<strong>Input:</strong> word1 = &quot;ac&quot;, word2 = &quot;b&quot;
<strong>Output:</strong> false
<strong>Explanation:</strong> Any pair of swaps would yield two distinct characters in the first string, and one in the second string.
</pre>

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

<pre>
<strong>Input:</strong> word1 = &quot;abcc&quot;, word2 = &quot;aab&quot;
<strong>Output:</strong> true
<strong>Explanation:</strong> We swap index 2 of the first string with index 0 of the second string. The resulting strings are word1 = &quot;abac&quot; and word2 = &quot;cab&quot;, which both have 3 distinct characters.
</pre>

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

<pre>
<strong>Input:</strong> word1 = &quot;abcde&quot;, word2 = &quot;fghij&quot;
<strong>Output:</strong> true
<strong>Explanation:</strong> Both resulting strings will have 5 distinct characters, regardless of which indices we swap.
</pre>

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

<ul>
	<li><code>1 &lt;= word1.length, word2.length &lt;= 10<sup>5</sup></code></li>
	<li><code>word1</code> and <code>word2</code> consist of only lowercase English letters.</li>
</ul>

class Solution:
    def isItPossible(self, word1: str, word2: str) -> bool:
        d1 = {}
        d2 = {}
        for let1 in word1:
            if(let1 not in d1):
                d1[let1] = 0
            d1[let1] += 1

        for let2  in word2:
            if(let2 not in d2):
                d2[let2] = 0
            d2[let2] += 1

        d1_items = list(d1.items())
        d2_items = list(d2.items())

        for k1, v1 in d1_items:

            # delete letter1 from the first word
            d1[k1] -= 1
            if(d1[k1] == 0):
                del d1[k1]
            
            for k2, v2 in d2_items:
                # delete letter2 from the second word
                d2[k2] -= 1
                if(d2[k2] == 0):
                    del d2[k2]

                # add letter1 to the second word
                if(k1 not in d2):
                    d2[k1] = 0
                d2[k1] += 1

                # add letter2 to the first word
                if(k2 not in d1):
                    d1[k2] = 0
                d1[k2] += 1

                if(len(d1) == len(d2)):
                    return True
                
                # remove letter1 from the second word
                d2[k1] -= 1
                if(d2[k1] == 0):
                    del d2[k1]

                
                # remove letter2 from the first word
                d1[k2] -= 1
                if(d1[k2] == 0):
                    del d1[k2]

                
                # add letter2 back to the second word
                if(k2 not in d2):
                    d2[k2] = 0
                d2[k2] += 1

                

            # add letter1 back to the first word
            if(k1 not in d1):
                d1[k1] = 0
            d1[k1] += 1

        return False

        
185