#include <iostream>
#include <queue>
#include <utility>
#include <vector>
#include <string>
#include <functional>
using namespace std;
using pd = pair<double,int>;

int main(){
	int n; cin >> n;
	priority_queue<pd, vector<pd>, greater<pd>> pq;
	for(int i = 0; i < n; ++i){
		double d; cin >> d;
		pq.push({d,i});
	}

	vector<vector<int>> children(n);

	while(pq.size() > 1){
		auto [a,x] = pq.top();
		pq.pop();
		auto [b,y] = pq.top();
		pq.pop();
		pq.push({a+b, children.size()});
		children.push_back({x,y});
	}

	string s;
	vector<string> ans(n);
	string cc = "-.aaa";
	function<void(int)> dfs = [&](int nd){
		if(nd < n){
			ans[nd] = s;
		}
		for(int i = 0; i < children[nd].size(); ++i){
			s.push_back(cc[i]);
			dfs(children[nd][i]);
		}
		if(!s.empty())
		s.pop_back();
	};

	auto [a,b] = pq.top();
	dfs(b);
	for(auto x: ans)cout << x << endl;
}