#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,v[200100];
signed main()
{
	int lst=0,x;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>x;v[x]=1;
		while(v[lst]) ++lst;
		printf("%d\n",lst);
	}
	return 0;
}
// #include<bits/stdc++.h>

//#include <atcoder/all>

// #include <array>
#include <vector>
// #include <list>
// #include <forward_list>
// #include <deque>
// #include <queue>
// #include <stack>

// #include <bitset>
// #include <unordered_map>
// #include <map>
// #include <unordered_set>
// #include <set>

#include <algorithm>

#include <string>
#include <iostream>
#include <iomanip>
// #include <sstream>

// #include <bit>
// #include <complex>
// #include <exception>
// #include <fstream>
// #include <functional>
// #include <iosfwd>
// #include <iterator>
// #include <limits>
// #include <locale>
// #include <memory>
// #include <new>
// #include <numeric>
// #include <stdexcept>
// #include <typeinfo>
// #include <utility>
// #include <valarray>
// #include <atomic>
// #include <chrono>
// #include <condition_variable>
// #include <future>
// #include <initializer_list>
// #include <mutex>
// #include <random>
// #include <ratio>
// #include <regex>
// #include <scoped_allocator>
// #include <system_error>
// #include <thread>
// #include <tuple>
// #include <typeindex>
// #include <type_traits>

// C
// #include <cassert>
// #include <cctype>
// #include <cerrno>
// #include <cfloat>
// #include <ciso646>
// #include <climits>
// #include <clocale>
// #include <cmath>
// #include <csetjmp>
// #include <csignal>
// #include <cstdarg>
// #include <cstddef>
// #include <cstdio>
// #include <cstdlib>
// #include <cstring>
// #include <ctime>
// #include <ccomplex>
// #include <cfenv>
// #include <cinttypes>
// #include <cstdbool>
// #include <cstdint>
// #include <ctgmath>
// #include <cwchar>
// #include <cwctype>

using namespace std;
//using namespace atcoder;

using ll = long long;
using ul = unsigned long long;
#define int ll
#define endl "\n"
#define unless(cond) if(!(cond))
#define until(cond) while(!(cond))
#define rep(i,s,e) for(ll i = (s); i < (e); ++i)
#define repR(i,s,e) for(ll i = (e)-1; (s) <= i; --i)
#define repE(i,s,e) for(ll i = (s); i <= (e); ++i)
#define repER(i,s,e) for(ll i = (e); (s) <= i; --i)
#define repSubsetR(set,super) for(ll _super=super,set = _super; 0 <= set; --set)if(set &= _super, true)
#define ALL(xs) (xs).begin(), (xs).end()

#define STRINGIFY(n) #n
#define TOSTRING(n) STRINGIFY(n)
void debug(){}
template <class X, class... Xs>
void debug(X&& x, Xs&&... xs) { cerr << x; if(sizeof...(Xs)==0)return; cerr << ", "; debug(move(xs)...); }
#ifdef DEBUG
#define debug(...) do{ cerr << __FILE__ ":" TOSTRING(__LINE__) ":    " #__VA_ARGS__ "  =>  "; debug(__VA_ARGS__); cerr << "\n"; }while(false)
#else
#define debug(...)
#endif

template<typename T, ll n> ll sz(T (&)[n]){ return n; }
template<typename T> ll sz(T xs){ return xs.size(); }
template<typename T> bool chmin(T &a, T b){ if(a <= b)return false; a = b; return true; }
template<typename T> bool chmax(T &a, T b){ if(a >= b)return false; a = b; return true; }



ll n;
vector<ll> as;
void solve(){
    vector<ll> sorted = as;
    sort(ALL(sorted));
    ll p = n-1;
    ll pivot = sorted[p];
    ll lv = 0;
    for(auto a : as){
        bool small = a < pivot;
        if(a == pivot){
            if(sorted[p] == pivot){
                small = true;
                --p;
            }
        }
        if(small){
            if(0 <= --lv){
                cout << ")";
            }else{
                cout << "(";
            }
        }else{
            if(++lv <= 0){
                cout << ")";
            }else{
                cout << "(";
            }
        }
    }
}
signed main(){
    cin.tie(nullptr);ios_base::sync_with_stdio(false);
    cout << fixed << setprecision(15);
    cin>>n;
    as.resize(2*n);
    for(auto&&a:as)cin>>a;
    solve();
    cout << "\n";
    return 0;
}
