#autumnfest07. [autumn_fest_07]Bit Map

[autumn_fest_07]Bit Map

配点

満点

110

部分点

30


問題文

1変数関数が与えられる。与えられた関数を等価な50文字以下の表現で書きなおせ。

ただしこの問題で関数 ffgg が等価であるとは、任意のxin0,1,..,2147483647(=2311)x \\in \\{0,1,..,2147483647(=2^{31}-1)\\} に対して f(x)=g(x)f(x) = g(x)が成り立つことをいう。


入力形式

入力は以下の形式で与えられる。

NN definition1 definition2 ... definitionNN

NN は定義する関数の個数である。

definitioniiは全て以下のBNFに従う。


<definition> ::= <function-name> + "(x)=" + <expr>
<expr> ::= "x" | <number> | <function> + "(" + <expr> + ")"
                  | "(" + <expr> + "|" + <expr> + ")"
                  | "(" + <expr> + "^" + <expr> + ")"
                  | "(" + <expr> + "&" + <expr> + ")"
<function> ::= <function-name> | <function-name> + "^" + <number>
<function-name> ::= "a" | "b" | ... | "j"
<number> ::= "0" | "1" | ... | "2147483647"

で使われる"&"、"|"、"^"はそれぞれビット演算のand、or、xorを表す。

で使われる"^"は関数の合成 fn(x)f^n(x) を表す。

非負整数 nn に対して fn(x)f^n(x) は次のように定義される。

f0(x)=xf^0(x) = x fn+1(x)=f(fn(x))f^{n+1}(x) = f(f^n(x))

関数の定義は上から行われる。定義式の右辺にその時点で未定義な他の関数や、定義しているその関数自身が現れることはない。また、既に定義された関数を新たに定義しなおすこともない。

定義される全ての関数は50文字以下の等価な表現を持つことが保証されている。

出力形式

関数を与えられた順に等価な表現で1行ごとに出力せよ。

各行毎に出力される文字列は50文字を越えてはならない。

出力は以下のBNFにしたがう必要がある。


<output> ::= <function-name> + "(x)=" + <expr>
<expr> ::= "x" | <number>
                  | "(" + <expr> + "|" + <expr> + ")"
                  | "(" + <expr> + "^" + <expr> + ")"
                  | "(" + <expr> + "&" + <expr> + ")"
<function-name> ::= "a" | "b" | ... | "j"
<number> ::= "0" | "1" | ... | "2147483647"

入力が従うBNFと異なり、ある関数の表現に他の関数を用いてはならないことに注意せよ。

制約

  • 1N101 ≤ N ≤ 10
  • |definitioni| 1000≤ 1000

この問題の判定には、3030 点分のテストケースのグループが設定されている。 このグループに含まれるテストケースは上記の制約に加えて下記の制約も満たす。

  • N=1N = 1

入力例 1


4
f(x)=(x^1)
g(x)=(f(x)&7)
h(x)=f(g^3((2147483647^x)))
c(x)=(3|10)

出力例 1


f(x)=(x^1)
g(x)=((x^1)&7)
h(x)=((x&7)^7)
c(x)=11

もちろんこれ以外にも様々な表現がある。例えば


f(x)=((x^3)^2)  c(x)=(((x^x)|1)^10)
```などと表現しても構わない。一方、```plain

f(x)=x^1  c(x)=(1|2|8)  c(x)=(11)
```などと表現するのは指定されたBNFに従わないのでWrong Answerとなる。

* * *

### 入力例 2

```plain

5
a(x)=(x^1)
b(x)=a^1000000000(x)
c(x)=a^1000000001(x)
d(x)=a^0((x|2))
e(x)=a^1((x|2))

出力例 2


a(x)=(x^1)
b(x)=x
c(x)=(x^1)
d(x)=(x|2)
e(x)=((x|2)^1)

Writer: komiya


Source Name

Autumn Fest