01 #include <bits/stdc++.h>
02 using namespace std;
03 vector<int> v[1005];
04 string s;
05
06 void dfs1(int x) {
07 printf("%d", x);
08 for(int i = 0; i < v[x].size(); i++) {
09 dfs1(v[x][i]);
10 }
11 }
12
13 void dfs2(int x) {
14 for(int i = 0; i < v[x].size(); i++) {
15 dfs2(v[x][i]);
16 }
17 printf("%d", x);
18 }
19
20 int main() {
21 cin >> s;
22 s = '(' + s + ')';
23 stack<int> stk;
24 int ans = 0, cnt = 0;
25 for(int i = 0; i < s.size(); i++) {
26 if (s[i] == '(') {
27 stk.push(++cnt);
28 ans += stk.size();
29 } else{
30 int x = stk.top(); stk.pop();
31 if(!stk.empty()) {
32 v[stk.top()].push_back(x);
33 }
34 }
35 }
36 printf("%d\n", ans);
37 dfs1(1);
38 printf("\n");
39 dfs2(1);
40 return 0;
41 }
假设程序输入的是一个合法的小括号匹配的序列,长度不超过2000。