import sys

input = sys.stdin.readline

sys.setrecursionlimit(10 ** 7)



from collections import Counter



# 直径が分かる。中心からの距離が分かる。



N = int(eval(input()))

A = [int(x) for x in input().split()]



diag = max(A)



def solve_even():

    # 中心が1頂点

    depth = [x-diag//2 for x in A]

    if any(x < 0 for x in depth):

        return False

    counter = Counter(depth)

    if counter[0] != 1:

        return False

    for i in range(1,diag//2+1):

        if counter[i] < 2:

            return False

    return True



def solve_odd():

    # 直径の隣を深さ0と扱う

    depth = [x-(diag+1)//2 for x in A]

    if any(x < 0 for x in depth):

        return False

    counter = Counter(depth)

    if counter[0] != 2:

        return False

    for i in range((diag+1)//2):

        if counter[i] < 2:

            return False

    return True



bl = solve_odd() if diag&1 else solve_even()

answer = 'Possible' if bl else 'Impossible'

print(answer)
import sys

read = sys.stdin.buffer.read

readline = sys.stdin.buffer.readline

readlines = sys.stdin.buffer.readlines



"""

・直径の長さをdとする。だいたい、半径より下の長さは存在できない

・だいたいd/2より上は任意に足せる。ただし中心は1組のみ

"""



N,*A = list(map(int,read().split()))



def test(A):

    D = max(A)

    r = (D+1)//2

    counter = [0] * (D+1)

    for x in A:

        counter[x] += 1

    if (D&1) and (counter[r] != 2):

        return False

    if (not (D&1)) and (counter[r] != 1):

        return False

    if any(x < r for x in A):

        return False

    if any(counter[x] <= 1 for x in range(r+1,D+1)):

        return False

    return True



answer = 'Possible' if test(A) else 'Impossible'



print(answer)
import sys

input = sys.stdin.readline
sys.setrecursionlimit(10**7)
from collections import Counter

# 直径が分かる。中心からの距離が分かる。
N = int(eval(input()))
A = [int(x) for x in input().split()]
diag = max(A)


def solve_even():
    # 中心が1頂点
    depth = [x - diag // 2 for x in A]
    if any(x < 0 for x in depth):
        return False
    counter = Counter(depth)
    if counter[0] != 1:
        return False
    for i in range(1, diag // 2 + 1):
        if counter[i] < 2:
            return False
    return True


def solve_odd():
    # 直径の隣を深さ0と扱う
    depth = [x - (diag + 1) // 2 for x in A]
    if any(x < 0 for x in depth):
        return False
    counter = Counter(depth)
    if counter[0] != 2:
        return False
    for i in range((diag + 1) // 2):
        if counter[i] < 2:
            return False
    return True


bl = solve_odd() if diag & 1 else solve_even()
answer = "Possible" if bl else "Impossible"
print(answer)

import sys

read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
"""
・直径の長さをdとする。だいたい、半径より下の長さは存在できない
・だいたいd/2より上は任意に足せる。ただし中心は1組のみ
"""
N, *A = list(map(int, read().split()))


def test(A):
    D = max(A)
    r = (D + 1) // 2
    counter = [0] * (D + 1)
    for x in A:
        counter[x] += 1
    if (D & 1) and (counter[r] != 2):
        return False
    if (not (D & 1)) and (counter[r] != 1):
        return False
    if any(x < r for x in A):
        return False
    if any(counter[x] <= 1 for x in range(r + 1, D + 1)):
        return False
    return True


answer = "Possible" if test(A) else "Impossible"
print(answer)

-input = sys.stdin.readline -sys.setrecursionlimit(10**7) -from collections import Counter - -# 直径が分かる。中心からの距離が分かる。 -N = int(eval(input())) -A = [int(x) for x in input().split()] -diag = max(A) +read = sys.stdin.buffer.read +readline = sys.stdin.buffer.readline +readlines = sys.stdin.buffer.readlines +""" +・直径の長さをdとする。だいたい、半径より下の長さは存在できない +・だいたいd/2より上は任意に足せる。ただし中心は1組のみ +""" +N, *A = list(map(int, read().split())) -def solve_even(): -    # 中心が1頂点 -    depth = [x - diag // 2 for x in A] -    if any(x < 0 for x in depth): +def test(A): +    D = max(A) +    r = (D + 1) // 2 +    counter = [0] * (D + 1) +    for x in A: +        counter[x] += 1 +    if (D & 1) and (counter[r] != 2): -    counter = Counter(depth) -    if counter[0] != 1: +    if (not (D & 1)) and (counter[r] != 1): -    for i in range(1, diag // 2 + 1): -        if counter[i] < 2: -            return False +    if any(x < r for x in A): +        return False +    if any(counter[x] <= 1 for x in range(r + 1, D + 1)): +        return False -def solve_odd(): -    # 直径の隣を深さ0と扱う -    depth = [x - (diag + 1) // 2 for x in A] -    if any(x < 0 for x in depth): -        return False -    counter = Counter(depth) -    if counter[0] != 2: -        return False -    for i in range((diag + 1) // 2): -        if counter[i] < 2: -            return False -    return True - - -bl = solve_odd() if diag & 1 else solve_even() -answer = "Possible" if bl else "Impossible" +answer = "Possible" if test(A) else "Impossible"