#include <bits/stdc++.h>
//#define rep(i, a, b) for(int i = int(a); i < int(b); i++)
#define rep(i,n) for (int i = 0; i < n; i++)
#define rer(i, a, b) for(int i = int(a) - 1; i >= int(b); i--)
//#define debug(fmt, ...) Debug(__LINE__, ":", fmt, ##__VA_ARGS__)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
/*
void Debug() {cerr << '\n'; }
template<class FIRST, class... REST>void Debug(FIRST arg, REST... rest){
    cerr<<arg<<" ";Debug(rest...);}
template<class T>ostream& operator<<(ostream& out,const vector<T>& v) {
    out<<"[";if(!v.empty()){rep(i,0,sz(v)-1)out<<v[i]<<", ";out<<v.back();}out<<"]";return out;}
template<class S, class T>ostream& operator<<(ostream& out,const pair<S, T>& v){
    out<<"("<<v.first<<", "<<v.second<<")";return out;}
*/
const double EPS = 1e-9;
const ll mod = 1000000007;
const int inf = 1 << 30;
const ll linf = 1LL << 60;
const double PI = 3.14159265358979323846;

typedef double D;
typedef complex<D> P;
typedef pair<P, P> L;
typedef vector<P> VP;
#define LE(n,m) ((n) < (m) + EPS)
#define GE(n,m) ((n) + EPS > (m))
#define EQ(n,m) (abs((n)-(m)) < EPS)
#define X real()
#define Y imag()

int n;
P p[1000];
L lines[1000];

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;  // counter clockwise
  if (cross(b,c) < -EPS) return -1;  // clockwise
  if (dot(b,c)   < -EPS) return +2;  // c--a--b on line
  if (norm(b) < norm(c)) return -2;  // a--b--c on line or a==b
  return 0;                          // a--c--b on line or a==c or b==c
}

VP convexHull(VP ps) {
  int n = ps.size(), k = 0;
  sort(ps.begin(), ps.end(), [](const P& left, const P& right) { return left.X < right.X || (left.X == right.X && left.Y < right.Y);});
  VP ch(2*n);
  for (int i = 0; i < n; ch[k++] = ps[i++]) // lower-hull
    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--]) // upper-hull
    while (k >= t && ccw(ch[k-2], ch[k-1], ps[i]) <= 0) --k;
  ch.resize(k-1);
  return ch;
}

int inCcwConvex(const VP& ps, P p) {
  int n = ps.size();
  P g = (ps[0] + ps[n / 3] + ps[n*2 / 3]) / 3.0;
  if (g == p) return 1;
  P gp = p - g;

  int l = 0, r = n;
  while (l + 1 < r) {
    int mid = (l + r) / 2;
    P gl = ps[l] - g;
    P gm = ps[mid] - g;
    if (cross(gl, gm) > 0) {
      if (cross(gl, gp) >= 0 && cross(gm, gp) <= 0) r = mid;
      else l = mid;
    }
    else {
      if (cross(gl, gp) <= 0 && cross(gm, gp) >= 0) l = mid;
      else r = mid;
    }
  }
  r %= n;
  D cr = cross(ps[l] - p, ps[r] - p);
  return EQ(cr, 0) ? 2 : cr < 0 ? 0 : 1;
}

void solve() {
    cin >> n;
    rep(i,n) {
        D x, y; cin >> x >> y;
        p[i] = P(x, y);
    }
    for (int i = 1; i < n-1; i++) {
        VP lvp, rvp;
        rep(j,i+1) lvp.push_back(p[j]);
        for (int j = i; j < n; j++) rvp.push_back(p[j]);
        VP lcon, rcon;
        lcon = convexHull(lvp);
        rcon = convexHull(rvp);
        bool ok = false;
        rep(j,lcon.size()) {
            if (EQ(lcon[j], p[i])) ok = true;
        }
        if (!ok) {
            cout << "Impossible" << endl;
            return;
        }
        ok = false;
        rep(j,rcon.size()) {
            if (EQ(rcon[j], p[i])) ok = true;
        }
        if (!ok) {
            cout << "Impossible" << endl;
            return;
        }
        rep(j,lcon.size()) {
            if (EQ(lcon[j], p[i])) continue;
            if (inCcwConvex(rcon, lcon[j])) {
                cout << "Impossible" << endl;
                return;
            }
        }
        rep(j,rcon.size()) {
            if (EQ(rcon[j], p[i])) continue;
            if (inCcwConvex(lcon, rcon[j])) {
                cout << "Impossible" << endl;
                return;
            }
        }
    }
    cout << "Possible" << endl;
}

int main() {
#ifndef LOCAL
    ios::sync_with_stdio(false);
    cin.tie(0);
#endif
    cout << fixed;
    cout.precision(20);
    cerr << fixed;
    cerr.precision(6);
#ifdef LOCAL
    freopen("in.txt", "rt", stdin);
#endif  
    solve();
    return 0;
}



Measured memory_bytes: 3468