#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; inline int toInt(string s) { int v; istringstream sin(s); sin >> v; return v; } template inline string toStr(T x) { ostringstream sout; sout << x; return sout.str(); } typedef vector vi; typedef vector vvi; typedef vector vs; typedef pair pii; typedef long long ll; #define ALL(a) (a).begin(),(a).end() #define RALL(a) (a).rbegin(),(a).rend() #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define REP(i,n) FOR(i,0,(n)-1) const double EPS = 1e-10; const double PI = acos(-1.0); const int INF = INT_MAX / 10; int main() { int N; cin >> N; vi W(N+1); int S = 0; FOR(i, 1, N) { cin >> W[i]; S += W[i]; } if (S % 2) { cout << "Impossible" << endl; return 0; } vvi dp(N + 1, vi(S + 1, 0)); dp[0][0] = 1; int M = 0; FOR(i, 1, N) { dp[i][0] = 1; FOR(j, 0, M) { dp[i][j + W[i]] += dp[i - 1][j]; } M += W[i]; } if (dp[N][S / 2]) { cout << "Possible" << endl; } else { cout << "Impossible" << endl; } return 0; }