Problem:
Score : 700 points

Problem Statement

Aoki loves numerical sequences and trees.

One day, Takahashi gave him an integer sequence of length N, a_1, a_2, ..., a_N, which made him want to construct a tree.

Aoki wants to construct a tree with N vertices numbered 1 through N, such that for each i = 1,2,...,N, the distance between vertex i and the farthest vertex from it is a_i, assuming that the length of each edge is 1.

Determine whether such a tree exists.

Constraints

2 ≦ N ≦ 100

1 ≦ a_i ≦ N-1

Input

The input is given from Standard Input in the following format:

N
a_1 a_2 ... a_N

Output

If there exists a tree that satisfies the condition, print Possible. Otherwise, print Impossible.

Sample Input 1

5
3 2 2 3 3

Sample Output 1

Possible

The diagram above shows an example of a tree that satisfies the conditions. The red arrows show paths from each vertex to the farthest vertex from it.

Sample Input 2

3
1 1 2

Sample Output 2

Impossible

Sample Input 3

10
1 2 2 2 2 2 2 2 2 2

Sample Output 3

Possible

Sample Input 4

10
1 1 2 2 2 2 2 2 2 2

Sample Output 4

Impossible

Sample Input 5

6
1 1 1 1 1 5

Sample Output 5

Impossible

Sample Input 6

5
4 3 2 3 4

Sample Output 6

Possible

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define P push
#define B begin()
#define E end()
#define SI size()
#define RE return
#define C continue
#define W while
#define SF(x) scanf("%d",&x);
#define MEM(vis,i) memset(vis,i,sizeof(vis))
#define rep(i,x,n) for(int i=x;i<n;i++)
using namespace std;
typedef long long  ll;
typedef pair<ll,ll> pll;
const long long MOD = 1e9+7;
const long long MAX = 1e14+8;
const long long MAXN = 1e5+8;
const long long eps = 1e-4;
ll t[103];
int main()
{
    ll n,M=0;
    cin>>n;
    if(n==2){
cout<<"Possible";
return 0;     }
    for(int i=0;i<n;i++){
        ll x;
        cin>>x;
        M=max(M,x);
        t[x]++;
    }
    bool b=1;
    if(t[M]==1)b=0;
    if(t[1]>1)b=0;
    for(int i=M;i>=ceil(M/2.0);i--){
        if(t[i]==0)b=0;
    }
    for(int i=0;i<ceil(M/2.0);i++)
        if(t[i]!=0)b=0;
    ll ad=ceil(M/2.0);
    if(M%2==0){
        if(t[ad]>2)b=0;
    }
    else
        if(t[ad]>1)b=0;
    if(!b)cout<<"Impossible";
    else cout<<"Possible";
    return 0;
}