<p>A <strong>good meal</strong> is a meal that contains <strong>exactly two different food items</strong> with a sum of deliciousness equal to a power of two.</p>

<p>You can pick <strong>any</strong> two different foods to make a good meal.</p>

<p>Given an array of integers <code>deliciousness</code> where <code>deliciousness[i]</code> is the deliciousness of the <code>i<sup>​​​​​​th</sup>​​​​</code>​​​​ item of food, return <em>the number of different <strong>good meals</strong> you can make from this list modulo</em> <code>10<sup>9</sup> + 7</code>.</p>

<p>Note that items with different indices are considered different even if they have the same deliciousness value.</p>

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

<pre>
<strong>Input:</strong> deliciousness = [1,3,5,7,9]
<strong>Output:</strong> 4
<strong>Explanation: </strong>The good meals are (1,3), (1,7), (3,5) and, (7,9).
Their respective sums are 4, 8, 8, and 16, all of which are powers of 2.
</pre>

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

<pre>
<strong>Input:</strong> deliciousness = [1,1,1,3,3,3,7]
<strong>Output:</strong> 15
<strong>Explanation: </strong>The good meals are (1,1) with 3 ways, (1,3) with 9 ways, and (1,7) with 3 ways.</pre>

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

<ul>
	<li><code>1 &lt;= deliciousness.length &lt;= 10<sup>5</sup></code></li>
	<li><code>0 &lt;= deliciousness[i] &lt;= 2<sup>20</sup></code></li>
</ul>

class Solution:
    def countPairs(self, deliciousness: List[int]) -> int:
        """
        deliciousness : array of integers
        deliciousness[i] : ith item of food.


        Return number of GOOD MEALS you can make from this list modulo 10^9 + 7

        del = [ 1, 3, 5, 7,  9] : each number is a different food
        GOOD MEAL = exactly 2 different food items s.t. sum of del = power of 2.


        del = 1 3 5 7 9

        1. Just get all powers of 2?
        2. 2 pair sum? -> 
            add item to hash
            1 : 
            3 : 
        
        3. Compare?
            3 + 1 = 4, is 4 in powers? yes, then 1 good meal
            5 + 1 = 6, it's not, so skip
            5 + 3 = 8, it's in powers, anotehr good meal


        """

        powers = [2**i for i in range(22)]
        # print(powers)
        total_pairs = 0
        MOD = 10**9 + 7

        hash_map = {}
        for dish in deliciousness:
            for power in powers:
                complement = power - dish
                if complement in hash_map:
                    total_pairs += hash_map[complement]
                    total_pairs %= MOD
                    print(total_pairs)
            if dish in hash_map:
                hash_map[dish] += 1
            else:
                hash_map[dish] = 1
        
        return total_pairs
24500