#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for (int i=0; i < (n); i++)
typedef double D;
typedef complex<D> P;
typedef pair<P, P> L;
typedef vector<P> VP;
const D EPS = 1e-9;
#define X real()
#define Y imag()
#define LE(n,m) ((n)<(m)+EPS)
#define GE(n,m) ((n)+EPS>(m))
#define EQ(n,m) (abs((n)-(m)) < EPS)
D dot(P a, P b) {return (conj(a)*b).X; }
D cross(P a, P b) {  return (conj(a)*b).Y;}
int ccw(P a, P b, P c) {
  b -= a;  c -= a;
  if (cross(b,c)>EPS) return 1;
  if (cross(b,c)<-EPS) return -1; 
  if (dot(b,c)<-EPS) return 2; 
  if (norm(b)<norm(c)) return -2; 
  return 0; 
}
namespace std {
  bool operator<(const P a, const P b) {
    return a.X != b.X ? a.X < b.X : a.Y < b.Y;
  }
}
VP convexHull(VP ps) { 
  int n = ps.size(), k = 0;
  sort(ps.begin(), ps.end());
  VP ch(2*n);
  for (int i=0;i<n;ch[k++]=ps[i++])
    while(k>=2&&ccw(ch[k-2],ch[k-1],ps[i])<=0)--k;
  for (int i=n-2,t=k+1;i>=0;ch[k++]=ps[i--])
    while (k>=t&&ccw(ch[k-2],ch[k-1],ps[i])<=0)--k;
  ch.resize(k-1);
  return ch;
}
int inConvex(P p, const VP& ps) {
  int n = ps.size();
  int dir = ccw(ps[0], ps[1], p);
  rep (i, n) {
    int ccwc = ccw(ps[i], ps[(i + 1) % n], p);
    if (!ccwc) return 2;
    if (ccwc != dir) return 0;
  }
  return 1;
}
int main(){
  int n;
  cin>>n;
  P p[n];
  rep(i,n){
    double a1,a2;
    cin>>a1>>a2;
    p[i]=P(a1,a2);
  }
  VP p1,p2;
  rep(i,n)p1.push_back(p[i]);
  rep(i,n){
    if(i)p2.push_back(p[i-1]);
    p1.erase(p1.begin());
    VP a1,a2;
    if(p1.size()>=3){
      a1=convexHull(p1);
      if(inConvex(p[i],a1)==1){cout<<"Impossible"<<endl;goto L;}
    }
    if(p2.size()>=3){
      a2=convexHull(p2);
      if(inConvex(p[i],a2)==1){cout<<"Impossible"<<endl;goto L;}
    }
  }
  cout<<"Possible"<<endl;L:;
}