ビット演算方程式(★★★★★)

2 secs 1024 MB
aiblecode's icon aiblecode

問題文

数字、文字 x 、括弧 ( , ) 、記号 | , ^ , & , = からなる xx についての方程式が文字列 SS として与えられます。

ここで方程式は、以下のBNFによって定義される <Equation> です。

BNF

<Equation> ::= <Expression> "=" <Number>
<Expression> ::= <OrTerm>

<OrTerm> ::= <XorTerm> | <OrTerm> "|" <XorTerm>
<XorTerm> ::= <AndTerm> | <XorTerm> "^" <AndTerm>
<AndTerm> ::= <Value> | <AndTerm> "&" <Value>

<Value> ::= <Number> | "x" | "(" <Expression> ")"
<Number> ::= 00 以上 2302^{30} 未満の整数

文字と記号はそれぞれ以下のように説明されます。

  • x:変数 xx 。ただし、xx00 以上の整数である。
  • |:ビットごとの論理和 or\mathrm{or}
  • ^:ビットごとの排他的論理和 xor\mathrm{xor} 。ただし、 or\mathrm{or} よりも先に計算される。
  • &:ビットごとの論理積 and\mathrm{and} 。ただし、 or,xor\mathrm{or}, \mathrm{xor} よりも先に計算される。
  • =:等号 ==

例えば、以下の例は <Equation> になり得ます。

  • 4|1^3&x=74 or 1 xor 3 and x=74 ~ \mathrm{or} ~ 1 ~ \mathrm{xor} ~ 3 ~ \mathrm{and} ~ x = 7 , 計算順序は 4 or (3 xor (1 and x))4 ~\mathrm{or}~ (3 ~ \mathrm{xor} ~ (1 ~\mathrm{and}~ x)) であることに注意。
  • (x|1)&((3^x)&15)=1073741823(x or 1) and ((3 xor x) and 15)=1073741823(x ~\mathrm{or}~ 1) ~\mathrm{and}~ ((3 ~\mathrm{xor}~ x) ~\mathrm{and}~ 15) = 1073741823
  • (((x)))=314(((x)))=314(((x))) = 314
  • 1=21=21 = 2

ただし、以下の例は <Equation> になり得ません。

  • x=-1
  • x=9999999999
  • 2x=4
  • 123=x
  • x=3=3

xx についての方程式の解の最小値を求めてください。ただし、解が存在しない場合は -1 を出力してください。

TT 個のテストケースが与えられるので、それぞれについて答えてください。

制約

  • TT1T1001 \leqq T \leqq 100 を満たす整数
  • SS は問題文中のBNFで定義された <Equation> である
  • 1S20001 \leqq |S| \leqq 2000

入力

入力は以下の形式で標準入力から与えられます。ここで、casei\mathrm{case}_iii 番目のテストケースです。

TT
case1\mathrm{case}_1
case2\mathrm{case}_2
\vdots
caseT\mathrm{case}_T

各テストケースは以下の形式で与えられます。

case

SS

出力

標準出力に TT 行出力し、ii 行目には ii 番目のテストケースについての答えを出力してください。

各テストケースについて、xx についての方程式の解の最小値を出力してください。ただし、解が存在しない場合は -1 を出力してください。

サンプル

入力
5
4|1^3&x=7
4&(3|x)=6
x^x|x&x=100
1=2
x|(x&(x|(x^1234)^5678)|9012)=13301
出力
2
-1
100
-1
4289

この入力では 55 個のテストケースが与えられています。1,2,3,41, 2, 3, 4 番目のテストケースについて、以下のことが言えます。

  • 4 or 1 xor 3 and x=74 ~\mathrm{or}~ 1 ~ \mathrm{xor} ~ 3 ~ \mathrm{and} ~ x = 7 の解のうち最小のものは x=2x = 2 です。

  • 4 and (3 or x)=64 ~\mathrm{and}~ (3 ~\mathrm{or}~ x) = 6 を満たす xx は存在しません。この場合、-1 を出力してください。

  • x xor x or x and x=100x ~ \mathrm{xor} ~ x ~\mathrm{or}~ x ~\mathrm{and}~ x = 100 の解は x=100x = 100 です。方程式の中に xx が複数個含まれている場合もあります。

  • 1=21 = 2 を満たす xx は存在しません。方程式の中に xx が含まれない場合もあります。

Submit


Go (1.21)