#include <bits/stdc++.h>
using namespace std;
int main() {
string s; cin >> s;
int n = s.length();
if (n % 2 != 0) { cout << -1; return 0; }
vector<int> v(n, -1);
vector<stack<int>> c(26);
for (int i = 0; i < n; i++) {
int x = s[i] - 'a';
if (c[x].empty()) c[x].push(i);
else { int j = c[x].top(); c[x].pop(); v[i] = j; v[j] = i; }
}
for (int i = 0; i < 26; i++) if (!c[i].empty()) { cout << -1; return 0; }
map<pair<int,int>, string> m;
auto f = [&](auto&& self, int i, int j) -> string {
if (i > j) return "";
if (m.count({i,j})) return m[{i,j}];
string a = "-1";
if (v[i] == j) { string t = self(self, i+1, j-1); if (t != "-1") a = "(" + t + ")"; }
string b = "-1";
int k = v[i];
if (k < j) { string l = self(self, i, k); string r = self(self, k+1, j);
if (l != "-1" && r != "-1") { string t = l + r; if (b == "-1" || t < b) b = t; }
}
string r = "-1";
if (a != "-1") r = a;
if (b != "-1" && (r == "-1" || b < r)) r = b;
return m[{i,j}] = r;
};
cout << f(f, 0, n-1);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |