#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; }