#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <bitset>
#include <map>
using namespace std;
typedef long long ll;

struct UnionFind {
  vector<int> par, siz;

  UnionFind(int n) : par(n, -1), siz(n, 1){}

  // 根を求める
  int root(int x) {
    if (par[x] == -1) return x;
    else return par[x] = root(par[x]);
  }

  // xとyが同じグループか判定する
  bool isSame(int x, int y) { return root(x) == root(y); }

  // xを含むグループとyを含むグループを併合する
  bool unite(int x, int y) { 
    x = root(x); y = root(y);
    if (x == y) return false;

    if (siz[x] < siz[y]) swap(x, y);
    par[y] = x;
    siz[x] += siz[y];
    return true;
  }

  // xを含むグループのサイズ
  int size(int x) { return siz[root(x)]; }
};


int main(void) {
  int  n;
  int M = 200005;
  cin >> n;
  vector<int> a(n, 0);
  for (int i = 0; i < n; i++) cin >> a[i];

  UnionFind uf(M);


  int l = 0;
  int r = n - 1;

  while(l < r){
    if (a[l] != a[r]) uf.unite(a[l], a[r]);
    l++;
    r--;
  }
  int ans = 0;

  for (int i = 0; i < M; i++){
    if (i == uf.root(i)) ans += uf.size(i) - 1;
  }

  cout << ans << endl;
}
#include<bits/stdc++.h>
#define LL long long
#define DB double
#define pb push_back
#define mkp make_pair
#define LB lower_bound
#define UB upper_bound
#define rint register int
#define MS(x,y) memset(x,y,sizeof(x))
#define rep(i,a,b) for(rint i=a,i##end=b;i<=i##end;++i)
#define drep(i,a,b) for(rint i=a,i##end=b;i>=i##end;--i)
#define cms printf("%.2lf\n",(&o2-&o1)/1024.0/1024)
using namespace std;bool o1;
char IO;
inline int Rd(){
	int _s_=0;
	bool _f_=0;
	while(!isdigit(IO=getchar()))
		IO=='-'&&(_f_=1);
	do _s_=(_s_<<1)+(_s_<<3)+(IO^48);
	while(isdigit(IO=getchar()));
	return _f_?-_s_:_s_;
}
struct node{
	int A,B;
	bool operator < (const node &_) const{
		if(A==_.A)
			return B<_.B;
		return A<_.A;
	}
}_b[400005];
int n,c[500005],a,b;
char d[500006];
bool o2;int main(){
	n=Rd();
	rep(i,1,2*n)
		_b[i]=(node){Rd(),i};
	sort(_b+1,_b+1+2*n);
	rep(i,1,n)
		c[_b[i].B]=1;
	a=0,b=0;
	rep(i,1,2*n){
		if(c[i]){
			if(!a&&b){
				d[i]=')';
				b--;
			}
			else {
				d[i]='(';
				if(!a){
					a=1;
					b=0;
				}
				b++;
			}
		}
		else {
			if(a&&b){
				d[i]=')';
				b--;
			}
			else {
				d[i]='(';
				if(a){
					a=0;
					b=0;
				}
				b++;
			}
		}
		putchar(d[i]);
	}
	cout<<d;
	return 0;
}