import java.util.*;
class Ideone {
public static void main
(String[] args
){ char[] symbols = {'T', 'T', 'F', 'T'};
char[] operators = {'|', '&', '^'};
int n = symbols.length;
int[][] F = new int[n][n];
int[][] T = new int[n][n];
for(int i=0; i<n; i++){
F[i][i] = symbols[i] == 'F' ? 1 : 0;
T[i][i] = symbols[i] == 'T' ? 1 : 0;
}
for(int gap=1; gap<n; gap++){
for(int i=0, j=gap; j<n; j++, i++){
T[i][j] = 0;
F[i][j] = 0;
for(int g=0; g<gap;g++){
// Find place of parenthesization using current value of gap
int k = i + g;
// Store Total[i][k] and Total[k+1][j]
int tik = T[i][k] + F[i][k];
int tkj = T[k+1][j] + F[k+1][j];
// Follow the recursive formulas according to the current operator
if (operators[k] == '&'){
T[i][j] += T[i][k]*T[k+1][j];
F[i][j] += (tik*tkj - T[i][k]*T[k+1][j]);
}
if (operators[k] == '|'){
F[i][j] += F[i][k]*F[k+1][j];
T[i][j] += (tik*tkj - F[i][k]*F[k+1][j]);
}
if (operators[k] == '^'){
T[i][j] += F[i][k]*T[k+1][j] + T[i][k]*F[k+1][j];
F[i][j] += T[i][k]*T[k+1][j] + F[i][k]*F[k+1][j];
}
}
}
}
System.
out.
println("Number of paranthesis => "+ T
[0][n
-1]); }
}
aW1wb3J0IGphdmEudXRpbC4qOwoKY2xhc3MgSWRlb25lIHsKCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncyl7CgkJY2hhcltdIHN5bWJvbHMgPSB7J1QnLCAnVCcsICdGJywgJ1QnfTsKCQljaGFyW10gb3BlcmF0b3JzID0gIHsnfCcsICcmJywgJ14nfTsKCgkJaW50IG4gPSBzeW1ib2xzLmxlbmd0aDsKCQlpbnRbXVtdIEYgPSBuZXcgaW50W25dW25dOwoJCWludFtdW10gVCA9IG5ldyBpbnRbbl1bbl07CgoJCWZvcihpbnQgaT0wOyBpPG47IGkrKyl7CgkJCUZbaV1baV0gPSBzeW1ib2xzW2ldID09ICdGJyA/IDEgOiAwOwoJCQlUW2ldW2ldID0gc3ltYm9sc1tpXSA9PSAnVCcgPyAxIDogMDsKCQl9CgoJCWZvcihpbnQgZ2FwPTE7IGdhcDxuOyBnYXArKyl7CgkJCWZvcihpbnQgaT0wLCBqPWdhcDsgajxuOyBqKyssIGkrKyl7CgkJCQlUW2ldW2pdID0gMDsKCQkJCUZbaV1bal0gPSAwOwoJCQkJCgkJCQlmb3IoaW50IGc9MDsgZzxnYXA7ZysrKXsKCQkJCQkvLyBGaW5kIHBsYWNlIG9mIHBhcmVudGhlc2l6YXRpb24gdXNpbmcgY3VycmVudCB2YWx1ZSBvZiBnYXAKCSAgICAgICAgICAgICAgICBpbnQgayA9IGkgKyBnOwkJCQkJCgoJCQkJCS8vIFN0b3JlIFRvdGFsW2ldW2tdIGFuZCBUb3RhbFtrKzFdW2pdCgkJCQkJaW50IHRpayA9IFRbaV1ba10gKyBGW2ldW2tdOwoJCQkJCWludCB0a2ogPSBUW2srMV1bal0gKyBGW2srMV1bal07CgoJCQkJCS8vIEZvbGxvdyB0aGUgcmVjdXJzaXZlIGZvcm11bGFzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBvcGVyYXRvcgoJCQkJCWlmIChvcGVyYXRvcnNba10gPT0gJyYnKXsKCQkJCQkJVFtpXVtqXSArPSBUW2ldW2tdKlRbaysxXVtqXTsKCQkJCQkJRltpXVtqXSArPSAodGlrKnRraiAtIFRbaV1ba10qVFtrKzFdW2pdKTsKCQkJCQl9CgoJCQkJCWlmIChvcGVyYXRvcnNba10gPT0gJ3wnKXsKCQkJCQkJRltpXVtqXSArPSBGW2ldW2tdKkZbaysxXVtqXTsKCQkJCQkJVFtpXVtqXSArPSAodGlrKnRraiAtIEZbaV1ba10qRltrKzFdW2pdKTsKCQkJCQl9CgoJCQkJCWlmIChvcGVyYXRvcnNba10gPT0gJ14nKXsKCQkJCQkJVFtpXVtqXSArPSBGW2ldW2tdKlRbaysxXVtqXSArIFRbaV1ba10qRltrKzFdW2pdOwoJCQkJCQlGW2ldW2pdICs9IFRbaV1ba10qVFtrKzFdW2pdICsgRltpXVtrXSpGW2srMV1bal07CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCVN5c3RlbS5vdXQucHJpbnRsbigiTnVtYmVyIG9mIHBhcmFudGhlc2lzID0+ICIrIFRbMF1bbi0xXSk7Cgl9Cn0K