#P1279. 小X与位运算

小X与位运算

题目描述

自从上次小 X 搞定了完美数之后, 他最近在研究一项和计算机密切相关的黑科技。要知道在计算机的内部,数据都是以二进制的形式来进行存储的,而它使用的计算方法也和我们平时的加减乘除四则运算有所不同, 它使用的是位运算。那什么是位运算呢?

基础位运算有三种符号,分别是 andorxor(分别对应与运算、或运算、异或运算三种运算)。

and 为例,两个二进制数在做 and 运算时,分别对两个二进制数的每一位做 and 运算。而对每一位做 and 运算时, 遵守以下规则:只有当两个数的这一位都是 11 时,运算结果才为 11 , 否则就是 00

例如: 110111011010110101and 运算之后结果为 101101 (高位不足用 00 补齐,最后结果忽略前导 00 )。

通俗点讲 and 运算就是按位做乘法, 即将两个二进制数从高位到低位依次对齐,然后每一位上对齐的两个数相乘即得到这一位的结果 。 我们可以列一个简单的竖式来模拟这个 and 运算:

    01101
and 10101
----------------
    00101

结果 0010100101 最左边的两个 00 即为前导 00 ,前导 00 一般要忽略。

orxor 的运算方法类似, 唯一不同的是在对每一位做运算时遵循的方法不同。

or 运算遵守以下规则:只有当两个数的这一位都是 00 时,运算结果才为 00 , 否则就是 11 。 例如 110111011010110101or 运算之后结果为 1110111101

   01101
or 10101
--------------
   11101

xor 运算遵守以下规则:只有当两个数的这一位相同时,运算结果才为 00 , 否则就是 11 。 例如 110111011010110101xor 运算之后结果为 1100011000

    01101
xor 10101
---------------
    11000

我们可以用一张简单的表格来说明三种位运算的运算规则。

image

小 X 当然不会满足于最简单的位运算了。小 X 想知道两个很大很大的二进制数,在做完位运算之后,最后的结果是什么。而小 X 自己无法知道正确答案是什么, 他只好求助于你来帮助他解决这个问题。

输入

输入数据第一行是一个字符串, 由字符 0011 组成, 表示一个二进制数。

第二行也是一个字符串, 由字符 0011 组成,同样表示一个二进制数。

第三行还是一个字符串,一定是 andorxor 三个中一种, 表示运算符号。

注意输入的二进制数没有前导零,字符个数可能会超过 255255 个但不会超过 100000100000 个。

输出

输出一行一个字符串, 由字符 0011 组成, 表示最后运算得到的二进制数。

注意输出的二进制数不能带有前导零, 即输出的第一个字符不能为 00

样例

110100
11001
or
111101

数据范围

nn 来表示输入的最长的二进制数的长度。

对于 30%30\% 的数据, 1n201 ≤ n ≤ 20

对于 70%70\% 的数据, 1n10001 ≤ n ≤ 1000

对于 100%100\% 的数据, 1n1000001 ≤ n ≤ 100000