JOIN

 Problem Statement

Problem Statement for ParenthesesAndPermutation

### Problem Statement

Correct parentheses sequences can be defined recursively as follows:
• The empty string "" is a correct sequence.
• If "X" and "Y" are correct sequences, then "XY" (the concatenation of X and Y) is a correct sequence.
• If "X" is a correct sequence, then "(X)" is a correct sequence.
• Each correct parentheses sequence can be derived using the above rules.
Examples of correct parentheses sequences include "", "()", "()()()", "(()())", and "(((())))".

You are given a int[] p with n elements. The elements of p are a permutation of the numbers 0 to n-1. Find strings s and t with the following properties:
• Both s and t are correct parentheses sequences.
• Each of them has exactly n characters.
• For each valid i, s[i] = t[ p[i] ].

Return one possible string s. If there are multiple possibilities, you may return any of them. If there is no solution, return "Impossible" instead.

### Definition

 Class: ParenthesesAndPermutation Method: getSequence Parameters: int[] Returns: String Method signature: String getSequence(int[] p) (be sure your method is public)

### Constraints

-p will contain between 2 and 50 elements, inclusive.
-The length of p will be even.
-p will be a permutation of 0 to (|p|-1).

### Examples

0)

 `{2,0,3,1}`
`Returns: "(())"`
 We are looking for two correct parentheses sequences such that s[0]=t[2], s[1]=t[0], s[2]=t[3], and s[3]=t[1]. There are two parentheses sequences of length 4: "(())" and "()()". We can now argue as follows: Can s be "(())"? We can deduce that t must be "()()" which is a correct parentheses sequence, so this is a valid solution. Can s be "()()"? We can deduce that t must be "))((" which is not a correct parentheses sequence, so this is not a valid solution. Therefore, the only valid solution is s = "(())".
1)

 `{1,0}`
`Returns: "Impossible"`
 s and t must each be "()", but then s[0] != t[p[0]], so it is impossible to find such s and t.
2)

 `{4,5,6,7,0,1,2,3}`
`Returns: "(())(())"`
 Another valid solution is: s = t = "()()()()".
3)

 `{9,8,7,6,5,4,3,2,1,0}`
`Returns: "Impossible"`
4)

 `{0,1}`
`Returns: "()"`

This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2010, TopCoder, Inc. All rights reserved.

This problem was used for:
2016 TCO Algorithm Round 3A - Division I, Level One