Aoki loves numerical sequences and trees. 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

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

# Buggy version:
import sys
n=int(input())
a=list(map(int,input().split()))
a.sort()
maxlen=a[-1]
thing={}
for i in range(n):
  if a[i] in thing:
    thing[a[i]]+=1
  else:
    thing[a[i]]=1
if maxlen%2==1:
  if not (maxlen+1)//2 in thing:
    print('Impossible')
    sys.exit()
  if thing[(maxlen+1)//2]!=2:
    print('Impossible')
    sys.exit()
if maxlen%2==0:
  if not (maxlen+1)//2 in thing:
    print('Impossible')
    sys.exit()
  if thing[(maxlen+1)//2]!=1:
    print('Impossible')
    sys.exit()
for i in thing:
  if i<(maxlen+1)//2:
    print('Impossible')
    sys.exit()
  if thing[i]<2:
    print('Impossible')
    sys.exit()
print('Possible')

# Fixed version:
import sys
n=int(input())
a=list(map(int,input().split()))
a.sort()
maxlen=a[-1]
thing={}
for i in range(n):
  if a[i] in thing:
    thing[a[i]]+=1
  else:
    thing[a[i]]=1
    
if maxlen%2==1:
  if not (maxlen+1)//2 in thing:
    print('Impossible')
    sys.exit()
  if thing[(maxlen+1)//2]!=2:
    print('Impossible')
    sys.exit()
if maxlen%2==0:
  if not (maxlen+1)//2 in thing:
    print('Impossible')
    sys.exit()
  if thing[(maxlen+1)//2]!=1:
    print('Impossible')
    sys.exit()
for i in thing:
  if i==(maxlen+1)//2:
    continue
  if i<(maxlen+1)//2:
    print('Impossible')
    sys.exit()
  if thing[i]<2:
    print('Impossible')
    sys.exit()
for i in range((maxlen+1)//2,maxlen):
  if not i in thing:
    print('Impossible')
    sys.exit()
print('Possible')

# Buggy version:
import math
#import numpy as np
import queue
from collections import deque,defaultdict
import heapq as hpq
from sys import stdin,setrecursionlimit
#from scipy.sparse.csgraph import dijkstra
#from scipy.sparse import csr_matrix
ipt = stdin.readline
setrecursionlimit(10**7)

def main():
    n = int(ipt())
    a = [int(i) for i in ipt().split()]
    a.sort(reverse=True)
    res = []
    k = a[0]
    if a[-1] < k//2:
        print("Impossible")
        exit()
    d = defaultdict(int)
    for i in a:
        d[i] += 1
    if k&1:
        if d[k//2+1] != 2:
            print("Impossoble")
            exit()
        for i in range(k//2+2,k+1):
            if d[i] < 2:
                print("Impossoble")
                exit()
    else:
        if d[k//2] != 1:
            print("Impossible")
            exit()
        for i in range(k//2+1,k+1):
            if d[i] < 2:
                print("Impossoble")
                exit()
    print("Possoble")



    return

if __name__ == '__main__':
    main()


# Fixed version:
import math
#import numpy as np
import queue
from collections import deque,defaultdict
import heapq as hpq
from sys import stdin,setrecursionlimit
#from scipy.sparse.csgraph import dijkstra
#from scipy.sparse import csr_matrix
ipt = stdin.readline
setrecursionlimit(10**7)

def main():
    n = int(ipt())
    a = [int(i) for i in ipt().split()]
    a.sort(reverse=True)
    res = []
    k = a[0]
    d = defaultdict(int)
    for i in a:
        d[i] += 1
    if k&1:
        if a[-1] <= k//2:
            print("Impossible")
            exit()
        if d[k//2+1] != 2:
            print("Impossible")
            exit()
        for i in range(k//2+2,k+1):
            if d[i] < 2:
                print("Impossible")
                exit()
    else:
        if a[-1] < k//2:
            print("Impossible")
            exit()
        if d[k//2] != 1:
            print("Impossible")
            exit()
        for i in range(k//2+1,k+1):
            if d[i] < 2:
                print("Impossible")
                exit()
    print("Possible")



    return

if __name__ == '__main__':
    main()

# Buggy version:
n = int(input())
a = list(map(int, input().split()))
x = sorted(set(a))
if (max(a) - 1) // 2 + 1 == min(a):
  if max(a) & 1:
    m = 0
    for i in range(x[0],m[-1]+1):
      if a.count(i) < 2: m = 1
    if m:
      print("Impossible")
    else:
      print("Possible")
  else:
    m = a.count(x[0]) != 1
    for i in range(x[0]+1,m[-1]+1):
      if a.count(i) < 2: m = 1
    if m:
      print("Impossible")
    else:
      print("Possible")
else:
  print("Impossible")

# Fixed version:
n = int(input())
a = list(map(int, input().split()))
x = sorted(set(a))
if (max(a) - 1) // 2 + 1 == min(a):
  if max(a) & 1:
    m = m = a.count(x[0]) != 2
    for i in range(x[0],x[-1]+1):
      if a.count(i) < 2: m = 1
    if m:
      print("Impossible")
    else:
      print("Possible")
  else:
    m = a.count(x[0]) != 1
    for i in range(x[0]+1,x[-1]+1):
      if a.count(i) < 2: m = 1
    if m:
      print("Impossible")
    else:
      print("Possible")
else:
  print("Impossible")

# Buggy version:
def main():
    from collections import Counter as ct
    n = int(input())
    a = list(map(int, input().split()))
    c = ct(a)
    min_a = min(a)
    max_a = max(a)
    if min_a == 1:
        if c[min_a] == 1:
            pass
        elif a == [1, 1]:
            print("Possible")
            return 0
        else:
            print("Impossible")
            return 0
    if c[min_a] == 1 and (max_a+1)//2 > min_a:
        print("Impossible")
        return 0
    if c[min_a] == 2 and (max_a+2)//2 > min_a:
        print("Impossible")
        return 0
    if c[min_a] > 2:
        print("Impossible")
        return 0
    for i in range(min_a+1, max_a+1):
        if c[i] < 2:
            print("Impossible")
            return 0
    print("Possible")

# Fixed version:
def main():
    from collections import Counter as ct
    n = int(input())
    a = list(map(int, input().split()))
    c = ct(a)
    min_a = min(a)
    max_a = max(a)
    if min_a == 1:
        if c[min_a] == 1:
            pass
        elif a == [1, 1]:
            print("Possible")
            return 0
        else:
            print("Impossible")
            return 0
    if c[min_a] == 1 and (max_a+1)//2 > min_a:
        print("Impossible")
        return 0
    if c[min_a] == 2 and (max_a+2)//2 > min_a:
        print("Impossible")
        return 0
    if c[min_a] > 2:
        print("Impossible")
        return 0
    for i in range(min_a+1, max_a+1):
        if c[i] < 2:
            print("Impossible")
            return 0
    print("Possible")
main()

# Buggy version:
import math,string,itertools,fractions,heapq,collections,re,array,bisect,sys,random,time

sys.setrecursionlimit(10**7)
inf = 10**10
mod = 10**9 + 7

def f():
    n = int(input())
    a = list(map(int, input().split()))
    a.sort()
    i = 1
    if a[0] < 2:
        return 'Impossible'
    if n > 2 and a[-1] == 1:
        return 'Impossible'
    if a[-1] != a[-2]:
        return 'Impossible'
    if a[-1] % 2 == 1:
        if a[-1] // 2 + 1 != a[0]:
            return 'Impossible'
        if a[0] != a[1]:
            return 'Impossible'
        i = 2
    else:
        if a[-1] // 2 != a[0]:
            return 'Impossible'
        if a[0] == a[1]:
            return 'Impossible'
    c = 2
    t = a[0]
    for j in range(i,n):
        if t != a[j]:
            if c < 2:
                return 'Impossible'
            c = 0
            t = a[j]
        c += 1
    return 'Possible'

print(f())


# Fixed version:
import math,string,itertools,fractions,heapq,collections,re,array,bisect,sys,random,time

sys.setrecursionlimit(10**7)
inf = 10**10
mod = 10**9 + 7

def f():
    n = int(input())
    a = list(map(int, input().split()))
    a.sort()
    i = 1
    if n > 2 and a[-1] == 1:
        return 'Impossible'
    if a[-1] != a[-2]:
        return 'Impossible'
    if a[-1] % 2 == 1:
        if a[-1] // 2 + 1 != a[0]:
            return 'Impossible'
        if a[0] != a[1]:
            return 'Impossible'
        if n > 2 and a[0] == a[2]:
            return 'Impossible'
        i = 2
    else:
        if a[-1] // 2 != a[0]:
            return 'Impossible'
        if a[0] == a[1]:
            return 'Impossible'
    c = 2
    t = a[0]
    for j in range(i,n):
        if t != a[j]:
            if c < 2:
                return 'Impossible'
            if t + 1 != a[j]:
                return 'Impossible'
            c = 0
            t = a[j]
        c += 1
    return 'Possible'

print(f())