def min_xor(a, b, c, d, w):
        """
        Lower bound of result of XORing 2-intervals.

        :param a: Lower bound of first interval
        :param b: Upper bound of first interval
        :param c: Lower bound of second interval
        :param d: Upper bound of second interval
        :param w: bit width
        :return: Lower bound of XORing 2-intervals
        """
        m = (1 << (w - 1))
        while m != 0:
            if ((~a) & c & m) != 0:
                temp = (a | m) & -m
                if temp <= b:
                    a = temp
            elif (a & (~c) & m) != 0:
                temp = (c | m) & -m
                if temp <= d:
                    c = temp
            m >>= 1
        return a ^ c
def min_xor ( a , b , c , d , w ) : m = ( 1 << ( w - 1 ) ) while m != 0 : if ( ( ~ a ) & c & m ) != 0 : temp = ( a | m ) & - m if temp <= b : a = temp elif ( a & ( ~ c ) & m ) != 0 : temp = ( c | m ) & - m if temp <= d : c = temp m >>= 1 return a ^ c
Lower bound of result of XORing 2-intervals.

        :param a: Lower bound of first interval
        :param b: Upper bound of first interval
        :param c: Lower bound of second interval
        :param d: Upper bound of second interval
        :param w: bit width
        :return: Lower bound of XORing 2-intervals