✔️[Python3] UNPRECENDENT NUMBER OF COUNTERS o͡͡͡͡͡͡͡͡͡͡͡͡͡͡╮(｡❛ᴗ❛｡)╭o͡͡͡͡͡͡͡͡͡͡͡͡͡͡, Explained
UPVOTE if you like (\uD83C\uDF38\u25E0\u203F\u25E0), If you have any question, feel free to ask.\n\nTo be able to make all values the same on the top or bottom,
**UPVOTE if you like (\uD83C\uDF38\u25E0\u203F\u25E0), If you have any question, feel free to ask.**\n\nTo be able to make all values the same on the top or bottom, the given dominos should have enough number of same values. So we need to compare the frequency of values on the top and bottom. If there are enough, say `2`s, on the bottom to meet the condition then we can return true. Also, we should account for the dominos with duplicate values. It\'s possible that a frequency of some value shows that we have enough suitable dominos but they may be a part of the duplicates. So we need to count such duplicates. In our case, we create a dedicated counter for every value without duplicates.\n\nTime: **O(n)** - iteration\nSpace: **O(1)** - just 3 lists with constant size\n\nRuntime: 1124 ms, faster than **94.15%** of Python3 online submissions for Minimum Domino Rotations For Equal Row.\nMemory Usage: 15.1 MB, less than **44.98%** of Python3 online submissions for Minimum Domino Rotations For Equal Row.\n\n```\nclass Solution:\n    def minDominoRotations(self, tops: List[int], bottoms: List[int]) -> int:\n        total = len(tops)\n        top_fr, bot_fr, val_total = [0]*7, [0]*7, [total]*7\n        for top, bot in zip(tops, bottoms):\n            if top == bot:\n                val_total[top] -= 1\n            else:\n                top_fr[top] += 1\n                bot_fr[bot] += 1\n                \n        for val in range(1, 7):\n            if (val_total[val] - top_fr[val]) == bot_fr[val]:\n                return min(top_fr[val], bot_fr[val])\n            \n        return -1\n```\n\n**UPVOTE if you like (\uD83C\uDF38\u25E0\u203F\u25E0), If you have any question, feel free to ask.**
['Python3']