만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

개 막는 울타리

시간 제한2초메모리 제한512 MB

요약
2의 거듭제곱 크기의 정사각형 돌을 모두 사용해 빈틈없는 직사각형 벽을 쌓을 수 있는지 판단합니다. 가능하면 벽의 길이와 높이를 출력합니다.
난이도

보통10점 중 6점

유형
수학, 그리디
정답자
아직 제출이 없습니다

문제

친구가 이웃집 개들이 말썽이라는 이야기를 계속 한다. 그 개들이 정원을 계속 망가뜨리고 냄새나는 "선물"을 남긴다고 한다. 오늘 친구는 개를 막을 울타리를 세워 문제를 해결해 보기로 했다.

울타리는 어느 곳이든 높이가 같아야 한다(즉, 직사각형이어야 한다). 개가 지나갈 수 있는 구멍도 없어야 한다. 다만 친구는 울타리의 정확한 가로세로 크기에는 크게 신경 쓰지 않는다.

친구는 이미 쓸 돌을 샀고, 그 돌을 모두 쓰려고 한다. 돌은 크기별로 정렬되어 있다. 모든 돌의 너비는 같지만 길이와 높이는 다를 수 있다. 각 돌은 길이와 높이가 같고, 둘 다 2의 거듭제곱이다. 울타리의 너비는 돌의 너비와 같아야 한다. 돌을 회전시킬 수 없고, 두 돌을 앞뒤로 이어 놓을 수도 없다.

돌의 한 변 길이와 개수가 주어졌을 때, 가진 돌을 모두 사용해 울타리를 세울 수 있는지 판단하라. 세울 수 있다면 그 울타리의 길이와 높이를 구하라.

그림 K.1: 첫 번째 예제의 그림.

입력

첫째 줄에 정수 nn (0≤n≤250 \le n \le 25)이 주어진다. 가장 큰 돌의 한 변 길이는 2n2^n이다.

둘째 줄에 n+1n + 1개의 정수 m0,…,mnm_0, \ldots, m_n (0≤mi≤10150 \le m_i \le 10^{15}, mn≥1m_n \ge 1)이 주어진다. mim_i는 한 변 길이가 2i2^i인 돌의 개수이다.

모든 돌의 넓이 합은 최대 101510^{15}이다.

출력

가진 돌을 모두 사용해 구멍 없는 직사각형 울타리를 세울 수 있다면, 울타리의 길이와 높이를 공백으로 구분해 한 줄에 출력하라. 그렇지 않으면 impossible을 출력하라. 답이 여러 개라면 그중 아무 것이나 출력해도 된다.

예제2

  1. 예제 1

    입력
    2
    21 3 3
    
    예상 출력
    9 9
    
  2. 예제 2

    입력
    2
    0 3 2
    
    예상 출력
    impossible