// yukicoder: No.792 真理関数をつくろう // 2019.7.10 bal4u #include #if 1 #define gc() getchar_unlocked() #define pc(c) putchar_unlocked(c) #else #define gc() getchar() #define pc(c) putchar(c) #endif int in() { // 非負整数の入力 int n = 0, c = gc(); do n = 10 * n + (c & 0xf); while ((c = gc()) >= '0'); return n; } void out(int n) { // 正整数の表示(出力) int i; char b[20]; i = 0; while (n) b[i++] = n % 10 + '0', n /= 10; while (i--) pc(b[i]); } void outs(char *s) { while (*s) pc(*s++); } int N; char q[4100][13]; char r[4100]; int main() { int i, p, t, f, r0, r1, lim; N = in(), lim = 1 << N, r0 = 0, r1 = 1; for (i = 1; i <= lim; i++) { for (p = 1; p <= N; p++) q[i][p] = gc() & 1, gc(); r[i] = t = gc() & 1, gc(), r0 |= t, r1 &= t; } if (r0 == 0) outs("A=⊥"); else if (r1 == 1) outs("A=⊤"); else { outs("A="), f = 0; for (i = 1; i <= lim; i++) if (r[i]) { if (f) outs("∨"); else f = 1; pc('('); if (q[i][1]) outs("P_1"); else outs("¬P_1"); for (p = 2; p <= N; p++) { outs("∧"); if (q[i][p]) outs("P_"), out(p); else outs("¬P_"), out(p); } pc(')'); } } pc('\n'); return 0; }