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