#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define SZ(a) (int)(a).size() #define FOR(i,a,b) for (int i=(a); i<=(b); ++i) #define REP(i,n) for (int i=0; i<(n); ++i) #define ALL(c) c.begin(), c.end() #define CLR(c,n) memset(c, n, sizeof(c)) #define MCPY(d, s) memcpy(d, s, sizeof(d)) #define TR(it, c) for (auto it = c.begin();it != c.end(); ++it) #define CONTAIN(it, c) (c.find(it) != c.end()) typedef vector VI; typedef pair PII; template void checkmin(T &a, T b) { if (b void checkmax(T &a, T b) { if (b>a) a=b; } typedef long long LL; const int INF=0x3F3F3F3F; int n, w[100]; bitset<5<<10> mark;; bool go() { int s = accumulate(w, w+n, 0); if (s % 2) return false; s /= 2; mark.reset(); mark.set(0); REP(k, n) { int d = w[k]; for (int i = s, j = s-d; j >= 0; --i, --j) { if (mark[j]) mark.set(i); } } return mark[s]; } int main(int argc, char *argv[]) { while (scanf("%d", &n) == 1) { REP(i, n) scanf("%d", &w[i]); printf("%spossible\n", go() ? "" : "im"); } }