#include #include using namespace std; //動的計画法を用いた解法 int main(void) { int N; cin >> N; int W[N]; int sum = 0; for (int i = 0; i < N; i++) { cin >> W[i]; sum += W[i]; } //cout << "sum: " << sum << endl; if (sum % 2) { cout << "impossible" << endl; } else { sort(W, W + N, greater()); int tar = sum / 2; bool possible[N+1][tar + 1] {false}; possible[0][0] = true; for (int i = 1; i < N + 1; i++) { for (int j = 0; j < tar + 1; j++) { if (possible[i-1][j]) { possible[i][j] = true; if (j + W[i-1] <= tar) { possible[i][j+W[i-1]] = true; } } } } if (possible[N][tar]) { cout << "possible" << endl; } else { cout << "impossible" << endl; } } return 0; }