#include <bits/stdc++.h>
        #include<iostream>
        #include<cstdio>
        #include<vector>
        #include<queue>
        #include<map>
        #include<cstring>
        #include<string>
        #include <math.h>
        #include<algorithm>
    //    #include <boost/multiprecision/cpp_int.hpp>
        #include<functional>
      #define int long long
        #define inf  1000000007
        #define pa pair<int,int>
#define ll long long
        #define pal pair<ll,ll>
        #define ppa pair<int,pa>
        #define  mp make_pair
        #define EPS (1e-10)
        #define equals(a,b) (fabs((a)-(b))<EPS)

        using namespace std;

        class Point{
        	public:
        	double x,y;
        	Point(double x=0,double y=0):x(x),y(y) {}
        	Point operator + (Point p) {return Point(x+p.x,y+p.y);}
        	Point operator - (Point p) {return Point(x-p.x,y-p.y);}
        	Point operator * (double a) {return Point(x*a,y*a);}
        	Point operator / (double a) {return Point(x/a,y/a);}
        	double absv() {return sqrt(norm());}
        	double norm() {return x*x+y*y;}
        	bool operator < (const Point &p) const{
        		return x != p.x ? x<p.x: y<p.y;
        	}
        	bool operator == (const Point &p) const{
        		return fabs(x-p.x)<EPS && fabs(y-p.y)<EPS;
        	}
        };
        typedef Point Vector;

        struct Segment{
        Point p1,p2;
        };

    double hen(Vector a){
    if(fabs(a.x)<EPS && a.y>0) return acos(0);
    else if(fabs(a.x)<EPS && a.y<0) return 3*acos(0);
    else if(fabs(a.y)<EPS && a.x<0) return 2*acos(0);
    else if(fabs(a.y)<EPS && a.x>0) return 0.0;
    else if(a.y>0) return acos(a.x/a.absv());
    else return 2*acos(0)+acos(-a.x/a.absv());

    }

        double dot(Vector a,Vector b){
        	return a.x*b.x+a.y*b.y;
        }
        double cross(Vector a,Vector b){
        	return a.x*b.y-a.y*b.x;
        }
        int dx[4] = {1, 0, -1, 0};
        int dy[4] = {0, 1, 0, -1};
        //----------------kokomade temple------------



signed main(){

	int n;
	cin>>n;
	int co[1000]={0};
	int a[110];
	for(int i=0;i<n;i++){
		cin>>a[i];
		co[a[i]]++;
	}
	sort(a,a+n);
	
	
	if(a[n-1]>=n){
		cout<<"Impossible"<<endl;
		return 0;
	}
	if(n==2){
		if(a[0]==1 && a[1]==1){
			cout<<"Possible"<<endl;
		}
		else{
			cout<<"Impossible"<<endl;
		}
		return 0;
	}
	if(n==3){
		if(a[0]==1 && a[1]==2&& a[2]==2){
			cout<<"Possible"<<endl;
		}
		else{
			cout<<"Impossible"<<endl;
		}
		return 0;
	}
	if(a[1]==1){
		cout<<"Impossible"<<endl;
		return 0;
	}
	if(a[0]==1){
		///cout<<"s"<<endl;
		int b=0;
		for(int i=1;i<n;i++) if(a[i]!=2) b++;
		if(b==0){
			cout<<"Possible"<<endl;
		}
		else{
			cout<<"Impossible"<<endl;
		}
		return 0;
	}
	
	
	if(a[0]> (n+1)/2){
		cout<<"Impossible"<<endl;
		return 0;
	}
		
	
	
	
	if(a[n-1]%2==0){
		if(a[0]!=a[n-1]/2){
			cout<<"Impossible"<<endl;
		return 0;
		}
		
		if(co[a[0]]!=1){
			cout<<"Impossible"<<endl;
		return 0;
		}
		
		int b=0;
		for(int i=a[0]+1;i<=a[n-1];i++) if(co[i]<2) b++;
		if(b!=0){
			cout<<"Impossible"<<endl;
		return 0;
		}
	}
	
	if(a[n-1]%2==1){
		if(a[0]!=a[n-1]/2+1){
			cout<<"Impossible"<<endl;
		return 0;
		}
		if(a[0]!=a[1]){
			cout<<"Impossible"<<endl;
		return 0;
		}
		if(co[a[0]]!=2){
			cout<<"Impossible"<<endl;
		return 0;
		}
		int b=0;
		for(int i=a[0];i<=a[n-1];i++) if(co[i]<2) b++;
		if(b!=0){
			cout<<"Impossible"<<endl;
		return 0;
		}
		
	}
	
	cout<<"Possible"<<endl;
	
	return 0;
}

//printf("%.10f\n",ans);


Measured memory_bytes: 256