#include <bits/stdc++.h>

#define X first
#define Y second
#define PB push_back
#define x first
#define y second
#define pb push_back
#define all(a) begin(a),end(a)
#define sz(a) (int)(a).size()
#define rep(i,a,b) for (int i=a;i<(b);++i)

using namespace std;

typedef long long ll;
using pii=pair<int,int>;
typedef vector<int> vi;
using vl=vector<ll>;

const int N=210,MOD=1e9+7;
const char en='\n';
const ll LLINF=1ll<<60;

vector<pair<int,int>> weights;
int n, P[N], dp[N][N], rek[N][N];
int sm[N][N];
string s[N];

int get(int l, int r) {
	return P[r] - (l ? P[l - 1] : 0);
}

int f(int l, int r) {
	if(l == r) return 0;
	if(dp[l][r]) return dp[l][r];
	int ret = MOD;
	for(int k = l;k < r;k++) {
		int sad = f(l, k) + f(k + 1, r) + get(l, r) + min(get(l, k), get(k + 1, r));
		if(sad < ret) {
			ret = sad;
			rek[l][r] = k;
			sm[l][r] = get(l, k) > get(k + 1, r);
		}
	}
	return dp[l][r] = ret;
}

void rekon(int l, int r) {
	if(l == r) return;
	int mid = rek[l][r];
	for(int i = l;i <= mid;i++)
		s[weights[i].Y] += (sm[l][r] ? '.' : '-');
	for(int i = mid + 1;i <= r;i++)
		s[weights[i].Y] += (sm[l][r] ? '-' : '.');
	rekon(l, mid);
	rekon(mid + 1, r);
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cin >> n;
	for(int i = 0;i < n;i++) {
		double x; cin >> x;
		weights.PB({round(x * 10000), i});
	}
	sort(weights.begin(), weights.end());
	for(int i = 0;i < n;i++) {
		P[i] = (i ? P[i - 1] : 0) + weights[i].X;
	}
	f(0, n - 1);
	rekon(0, n - 1);
	for(int i = 0;i < n;i++)
		cout << s[i] << endl;
	return 0;
}