class Solution_once:  
    def singleNumber(self, arr):  
        ones, twos = 0, 0  
        for x in arr:  
            ones, twos = (ones ^ x) & ~twos, (ones & x) | (twos & ~x)  
        assert twos == 0  
        return ones  
class Solution_twice:  
    def single_number(arr):  
        ones, twos, threes = 0, 0, 0  
        for x in arr:  
            ones, twos, threes = (~x & ones) | (x & ~ones & ~twos & ~threes), (~x & twos) | (x & ones), (~x & threes) | (x & twos)  
        return twos  
  
if __name__ == "__main__":  
    print(Solution_once().singleNumber([1, 1, 1, 2, 2, 2, 3]))  
    print(Solution_once().singleNumber([5, 3, 0, 3, 5, 5, 3]))  