#include <bits/stdc++.h>
template <typename Tp>
void in(Tp &x) {
  char ch = getchar(), f = 1;
  x = 0;
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') ch = getchar(), f = -1;
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  x *= f;
}
template <typename Tp>
void out(Tp x) {
  if (x > 9) out(x / 10);
  putchar(x % 10 + '0');
  return;
}
template <typename Tp>
Tp Max(const Tp &x, const Tp &y) {
  return x > y ? x : y;
}
template <typename Tp>
Tp Min(const Tp &x, const Tp &y) {
  return x < y ? x : y;
}
template <typename Tp>
bool chkmax(Tp &x, Tp y) {
  return x >= y ? 0 : (x = y, 1);
}
template <typename Tp>
bool chkmin(Tp &x, Tp y) {
  return x <= y ? 0 : (x = y, 1);
}
const int MAXN = 110;
int n;
int dis[MAXN], tot[MAXN];
void error() {
  puts("Impossible");
  exit(0);
}
int main() {
  in(n);
  for (int i = (1), i_END_ = (n); i <= i_END_; i++) in(dis[i]), tot[dis[i]]++;
  int maxx = -1;
  for (int i = (1), i_END_ = (n); i <= i_END_; i++) chkmax(maxx, dis[i]);
  if (maxx == 1 && n > 2) error();
  for (int i = (1), i_END_ = ((maxx + 1) / 2 - 1); i <= i_END_; i++)
    if (tot[i]) error();
  if (maxx % 2 == 0 && tot[maxx / 2] != 1) error();
  if (maxx % 2 != 0 && tot[(maxx + 1) / 2] != 2) error();
  for (int i = ((maxx + 1) / 2 + 1), i_END_ = (maxx); i <= i_END_; i++)
    if (tot[i] < 2) error();
  puts("Possible");
  return 0;
}
