CF878A.Short Program

传统题 时间 2000 ms 内存 256 MiB 7 尝试 25 已通过 7 标签

Short Program

题目描述

Petya 学会了一种新语言 CALPAS。一个 CALPAS 程序接收一个非负整数作为输入,并输出一个非负整数。

该语言只有三种指令:把当前整数与给定常数进行按位与、按位或或按位异或。常数范围均为 00 到 10231023。程序会按给定顺序依次执行所有指令。

Petya 写出了一个很长的程序。请构造一个至多包含 55 行指令的新 CALPAS 程序,使它对所有 00 到 10231023 的输入都与原程序输出相同。

输入格式

第一行一个整数 nn(1≤n≤5⋅1051 \le n \le 5\cdot10^5),表示原程序的指令数。

接下来 nn 行,每行包含一个字符和一个整数 xix_i(0≤xi≤10230 \le x_i \le 1023):

  • & x_i 表示当前数与 xix_i 按位与;
  • | x_i 表示当前数与 xix_i 按位或;
  • ^ x_i 表示当前数与 xix_i 按位异或。

输出格式

第一行输出一个整数 kk(0≤k≤50 \le k \le 5),表示你构造的程序长度。

接下来输出 kk 行指令,格式与输入相同。对于每个 00 到 10231023 的输入,新程序必须与原程序得到相同输出。

存在多种正确答案,输出任意一种即可。

样例

输入 1

3
| 3
^ 2
| 1

输出 1

2
| 3
^ 2

输入 2

3
& 1
& 3
& 5

输出 2

1
& 1

输入 3

3
^ 1
^ 2
^ 3

输出 3

0

样例说明

第二组中,原程序的作用为 $((x\mathbin{\&}1)\mathbin{\&}3)\mathbin{\&}5=x\mathbin{\&}(1\mathbin{\&}3\mathbin{\&}5)=x\mathbin{\&}1$, 所以一条 & 1 指令即可。

在线编程 IDE

建议全屏模式获得最佳体验