@classmethod
def bitwise_mat_pow(cls, a, n):
    if (n == 0):
        return (np.eye(len(a), dtype=np.uint32) * ((1 << 32) - 1))
    res = cls.bitwise_mat_pow(a, (n // 2))
    res = cls.bitwise_dot(res, res)
    return (cls.bitwise_dot(res, a) if (n & 1) else res)
@classmethod
def bitwise_mat_pow(cls, a, n):
    if (n == 0):
        return (np.eye(len(a), dtype=np.uint32) * ((1 << 32) - 1))
    res = cls.bitwise_mat_pow(a, (n // 2))
    res = cls.bitwise_dot(res, res)
    return (cls.bitwise_dot(res, a) if (n & 1) else res)