#include #include #include using namespace std ; vector> adj ; vector stack ; string lab ; int a, b, n, s ; int recur(int at, int p) { int r = 0 ; int restore = -1 ; if (lab[at] == '(' || lab[at] == '{' || lab[at] == '[') { stack.push_back(lab[at]) ; } else { if (stack.size() == 0 || (stack[stack.size()-1] ^ lab[at]) >= 16) return r ; restore = stack[stack.size()-1] ; stack.pop_back() ; } if (stack.size() == 0 && p >= 0) r++ ; for (auto v: adj[at]) if (v != p) r += recur(v, at) ; if (restore < 0) stack.pop_back() ; else stack.push_back(restore) ; return r ; } int main(int argc, char *argv[]) { cin >> n >> lab ; adj.resize(n) ; for (int i=0; i+1> a >> b ; a-- ; b-- ; adj[a].push_back(b) ; adj[b].push_back(a) ; } for (int i=0; i