#include "bits/stdc++.h"
using namespace std;

#define int long long
#define ld long double
#define ll long long
#define st first
#define nd second
#define pb push_back
#define eb emplace_back
#define sz(x) (int)(x).size()
#define all(x) begin(x),end(x)
#define FOR(i,l,r) for(int i = (l); i <= (r); i++)
#define ROF(i,r,l) for (int i = (r); i >= (l); i--)

auto& operator<<(auto&o, pair<auto,auto>p) {
	return o << "("  << p.st << ", " << p.nd << ")";
}
auto operator<<(auto&o, auto x)->decltype(end(x), o) {
	o << "{"; int i =0; for (auto e : x) o << ","+!i++ << e; 
	return o << "}";
}
#ifdef LOCAL
#define debug(x...) cerr << "[" #x "]: ", [](auto...$) { \
	((cerr << $ << "; "), ...) << endl; }(x)
#else
#define debug() {}
#endif

#define rep(i, a, b) for (int i = (a); i < (b); i++)
using pii = pair<int, int>;
using vi = vector<int>;

const int inf = 1e9 + 7;

const int N = 1000 + 7;

vector<int> adj[N];

string word;
string ans[N];

void dfs(int u) {
	if (adj[u].empty()) {
		ans[u] = word;
		return;
	}

	rep(i, 0, sz(adj[u])) {
		if (i == 0) {
			word += '-';
		}
		else {
			word += '.';
		}

		dfs(adj[u][i]);

		word.pop_back();
	}
}

signed main() {
	cin.tie(0)->sync_with_stdio(0);

	int n;
	cin >> n;
	vector<ld> f(n);
	rep(i, 0, n)
		cin >> f[i];
	
	set<pair<ld, int>> S;
	rep(i, 0, n) {
		S.emplace(f[i], i);
	}

	int nxt = n;
	while (S.size() > 1) {
		auto [a, u] = *S.begin();
		S.erase(S.begin());
		auto [b, v] = *S.begin();
		S.erase(S.begin());

		adj[nxt].pb(u);
		adj[nxt].pb(v);
		
		S.emplace(a + b, nxt);

		nxt++;
	}

	dfs(nxt - 1);

	rep(i, 0, n)
		cout << ans[i] << '\n';

	return 0;
}