#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#define all(x) (x).begin(),(x).end()
//#pragma GCC optimize ("-O3")
using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); }
typedef long long ll; const int inf = INT_MAX / 2; const ll infl = 1LL << 60;
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a = b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a = b; return 1; } return 0; }
//---------------------------------------------------------------------------------------------------
/*---------------------------------------------------------------------------------------------------
　　　　　　　　　　　 ∧＿∧  
　　　　　 ∧＿∧ 　（´<_｀ ）　 Welcome to My Coding Space!
　　　　 （ ´_ゝ`）　/　 ⌒i     
　　　　／　　　＼　 　 |　|     
　　　 /　　 /￣￣￣￣/　　|  
　 ＿_(__ﾆつ/　    ＿/ .| .|＿＿＿＿  
　 　　　＼/＿＿＿＿/　（u　⊃  
---------------------------------------------------------------------------------------------------*/












int N, P[101010], A[101010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    rep(i, 0, N) cin >> P[i];

    string ans = "";
    int cnt = 0;
    rep(i, 0, N) {
        while (cnt < P[i]) {
            ans += "(";
            cnt++;
        }
        ans += ")";
    }

    stack<int> stk;
    int st = 1;
    int idx = 0;
    rep(i, 0, N * 2) {
        if (ans[i] == '(') {
            stk.push(st);
            st++;
        }
        else {
            if (stk.size() == 0) {
                printf(":(\n");
                return;
            }

            A[idx] = stk.top();
            stk.pop();
            idx++;
        }
    }

    rep(i, 0, N) if (P[i] != A[i]) {
        printf(":(\n");
        return;
    }

    printf("%s\n", ans.c_str());
}
