#include <iostream> #include <algorithm> #include <stack> #include <string> using namespace std; const int N = 1007; int a[N], c[N], Afterwards[N], n; stack<int> s1, s2; bool G[N][N]; bool Color(int x, int Colour) { c[x] = Colour; for (int i = 1; i <= n; ++i) if (G[x][i]) if (c[x] == c[i]) return false; else if (!c[i] && !Color(i, -Colour)) return false; return true; } int main() { int i, j, k, Top = 1; string s = ""; cin >> n; for (i = 1; i <= n; ++i) cin >> a[i]; copy(a + 1, a + n + 1, Afterwards + 1); sort(Afterwards + 1, Afterwards + n + 1); for (i = 1; i <= n; ++i) for (j = i + 1; j <= n; ++j) if (a[i] < a[j]) for (k = j + 1; k <= n; ++k) if (a[k] < a[i]) G[i][j] = G[j][i] = true; for (i = 1; i <= n; ++i) if (!c[i] && !Color(i, 1)) {cout << 0 << endl; return 0;} for (i = 1; i <= n; ++i) if (c[i] == 1) { s += "a "; s1.push(a[i]); while (!s1.empty() && s1.top() == Afterwards[Top]) {s += "b "; s1.pop(); ++Top;} } else { s += "c "; s2.push(a[i]); while (!s2.empty() && s2.top() == Afterwards[Top]) {s += "d "; s2.pop(); ++Top;} } while (!s1.empty() || !s2.empty()) if (!s1.empty() && s1.top() == Afterwards[Top]) {s += "b "; s1.pop(); ++Top;} else if (!s2.empty() && s2.top() == Afterwards[Top]) {s += "d "; s2.pop(); ++Top;} cout << s.substr(0, s.size() - 1) << endl; return 0; } /************************************************************** Problem: 2283 User: admin Language: C++ Result: Accepted Time:207 ms Memory:3084 kb ****************************************************************/