#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve() {
int n;
cin >> n;
n *= 2;
vector <vector <int>> val(2, vector <int> (n));
for (int i = 0; i < n; ++i) {
cin >> val[0][i];
}
for (int i = 0; i < n; ++i) {
cin >> val[1][i];
}
vector <vector <int>> mx(2, vector <int> (n, 1)), mn(2, vector <int> (n, 1)), is(2, vector <int> (n));
is[0][n - 1] = 1;
is[1][n - 1] = 1;
int k = n / 2;
for (int i = n - 2; i >= 0; --i) {
for (int j = 0; j < 2; ++j) {
mn[j][i] = n + 10;
if (val[j][i] <= val[j][i + 1] && is[j][i + 1]) {
mx[j][i] = max(mx[j][i], mx[j][i + 1] + 1);
mn[j][i] = min(mn[j][i], mn[j][i + 1] + 1);
is[j][i] = 1;
}
int cv = j ^ 1;
if (val[j][i] <= val[cv][i + 1] && is[cv][i + 1]) {
mx[j][i] = max(mx[j][i], n - mn[cv][i + 1] - i);
mn[j][i] = min(mn[j][i], n - mx[cv][i + 1] - i);
is[j][i] = 1;
}
}
}
int start = - 1;
n /= 2;
if (is[0][0]) {
if (mx[0][0] >= n && mn[0][0] <= n) {
start = 0;
}
}
if (is[1][0]) {
if (mx[1][0] >= n && mn[1][0] <= n) {
start = 1;
}
}
if (start == - 1) {
cout << - 1 << '\n';
return;
}
n *= 2;
string ans = "";
vector <int> counter(2, n / 2);
for (int i = 0; i < n; ++i) {
ans.push_back((char)('A' + start));
--counter[start];
if (i != n - 1) {
if (is[start][i + 1]) {
if (!(mx[start][i + 1] >= counter[start] && mn[start][i + 1] <= counter[start] && val[start][i + 1] >= val[start][i])) {
start ^= 1;
}
} else {
start ^= 1;
}
}
}
cout << ans << '\n';
}
signed main() {
cin.tie(0);
ios::sync_with_stdio(false);
solve();
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |