#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep1(i,n) for(int i=1;i<=(int)(n);i++)
#define all(c) c.begin(),c.end()
#define pb push_back
#define fs first
#define sc second
#define show(x) cout << #x << " = " << x << endl
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
using namespace std;
typedef double D;
typedef complex<D> P;
typedef vector<P> Pol;
const D eps=1e-9;
bool eq(D a,D b){return abs(a-b)<eps;}
int sig(D a){return eq(a,0)?0:(a>0?1:-1);}
bool compxy(const P& l,const P& r){
	return eq(l.real(),r.real()) ? l.imag()<r.imag() : l.real()<r.real();
}
D cro(P a,P b){return imag(conj(a)*b);}
int ccw(P a,P b,P c){
	if(sig(cro(b-a,c-a))!=0) return sig(cro(b-a,c-a));
	if(eq(abs(a-c)+abs(c-b),abs(a-b))) return 0;
	if(eq(abs(a-b)+abs(c-b),abs(a-c))) return -2;
	if(eq(abs(a-c)+abs(a-b),abs(c-b))) return 2;
}
Pol conv(Pol p){
	int N=p.size(),k=0;
	sort(all(p),compxy);
	Pol ret(2*N);
	rep(i,N){
		while(k>=2&&ccw(ret[k-2],ret[k-1],p[i])<=0) --k;
		ret[k++]=p[i];
	}
	for(int i=N-2,t=k+1;i>=0;i--){
		while(k>=t&&ccw(ret[k-2],ret[k-1],p[i])<=0) --k;
		ret[k++]=p[i];
	}
	ret.resize(k-1);
	return ret;
}
int contain(Pol pol,P p){
	bool in=false;
	rep(i,pol.size()){
		P a=pol[i]-p,b=pol[(i+1)%pol.size()]-p;
		if(ccw(a,b,P(0,0))==0) return 0;
		if(imag(a)>imag(b)) swap(a,b);
		if(sig(imag(a))<=0 && 0<sig(imag(b)) && ccw(P(0,0),a,b)==1) in=!in;
	}
	return in?1:-1;
}
P p[1000];
bool solve(){
	int N;
	cin>>N;
	rep(i,N){
		double x,y;
		cin>>x>>y;
		p[i]=P(x,y);
	}
	for(int i=3;i<N;i++){
		Pol vs;
		rep(j,i) vs.pb(p[j]);
		vs=conv(vs);
		if(contain(vs,p[i])==1) return false;
	}
	reverse(p,p+N);
	for(int i=3;i<N;i++){
		Pol vs;
		rep(j,i) vs.pb(p[j]);
		vs=conv(vs);
		if(contain(vs,p[i])==1) return false;
	}
	return true;
}
int main(){
	if(solve()) puts("Possible");
	else puts("Impossible");
}