#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
****************************************************************/