This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
bool isValid(const string &str) {
stack<char> s;
// cout << endl;
for (const char &c : str) {
if (c == '(') {
s.push(c);
// cout << "Pushed " << c << '\n';
} else {
if (s.top() == '(') {
s.pop();
// cout << "Popped (\n";
} else {
// cout << c << " doesn't match )\n";
return false;
}
}
}
if (!s.empty()) {
// cout << s.top() << "is left. " << '\n';
}
return s.empty();
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
string s;
vector<pair<size_t, size_t>> m;
cin >> s;
while (true) {
size_t p1 = s.find_first_of('a');
size_t p2 = s.find_last_of('a');
m.push_back({p1, p2});
if (p1 == p2) {
break;
}
s[p1] = '(';
s[p2] = ')';
}
while (true) {
size_t p1 = s.find_first_of('b');
size_t p2 = s.find_last_of('b');
m.push_back({p1, p2});
if (p1 == p2) {
break;
}
s[p1] = '(';
s[p2] = ')';
}
if (!isValid(s)) {
cout << "-1\n";
return 0;
}
for (const auto &[x, y] : m) {
if (x != y - 1 and !isValid(s.substr(x + 1, y - x - 1))) {
// cout << s.substr(x + 1, y - x - 1) << " is invalid.\n";
cout << "-1\n";
return 0;
}
}
cout << s << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |