Main idea: 4 sides is equal and two diagonals are equal=> using combination with Count time O(1) space O(1)

class Solution:
    def validSquare(self, p1: List[int], p2: List[int], p3: List[int], p4: List[int]) -> bool:
        def dis(p1,p2):
            return (p2[1] - p1[1])*(p2[1] - p1[1]) + (p2[0] - p1[0])*(p2[0] - p1[0])
        li = [dis(p1,p2), dis(p1,p3), dis(p1,p4), dis(p2,p3), dis(p2,p4), dis(p4,p3)]
        cnt = collections.Counter(li)
        return len(cnt) == 2 and 2 in cnt.values() and 4 in cnt.values()