만드는 중입니다

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

유일한 해

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

요약
-1, 0, 1로 이루어진 배열 a가 주어질 때, a와 -a만 부호 합을 m으로 나누어떨어지게 만드는 m과 x를 구합니다.
난이도

보통10점 중 7점

유형
수학, 정수론, 비트 연산
정답자
아직 제출이 없습니다

문제

교수님이 고급 수학 과제를 학생들에게 낼 준비를 하고 있다. 학생들에게 정수 nn개 x1,x2,…,xnx_1, x_2, \ldots, x_n과 정수 mm (1≤m<2n1 \le m < 2^n)이 주어진다. 학생은 각 값이 −1-1, 00, 11 중 하나인 정수 a1,a2,…,ana_1, a_2, \ldots, a_n을 nn개 고르되, 적어도 하나는 0이 아니어야 한다. 고른 정수는 a1x1+a2x2+…+anxna_1x_1+a_2x_2+\ldots+a_nx_n이 mm으로 나누어떨어져야 한다.

교수님은 정답을 주어진 정수 배열 a1,a2,…,ana_1, a_2, \ldots, a_n (−1≤ai≤1-1 \le a_i \le 1, 적어도 하나는 0이 아님)으로 정했다. 학생들의 풀이를 쉽게 확인하려고 이 배열만 가능한 풀이가 되도록 정수 x1,…,xnx_1, \ldots, x_n과 mm을 고르고 싶어 한다. 그런데 배열 −a1,…,−an-a_1, \ldots, -a_n도 항상 풀이이므로 이는 불가능하다.

그래서 교수님은 조건을 완화해, 풀이가 a1,…,ana_1, \ldots, a_n과 −a1,…,−an-a_1, \ldots, -a_n 두 개뿐이기를 바란다. 정수 x1,…,xnx_1, \ldots, x_n과 mm을 골라 주자.

입력

첫 줄에 정수 nn (1≤n≤301 \leq n \leq 30)이 주어진다. 다음 줄에는 정수 a1,a2,…,ana_1, a_2, \ldots, a_n (−1≤ai≤1-1 \leq a_i \leq 1)이 주어진다. 적어도 하나의 aia_i는 0이 아니다.

출력

첫 줄에 정수 mm (1≤m<2n1 \le m < 2^n)을 출력한다. 다음 줄에는 정수 x1,x2,…,xnx_1, x_2, \ldots, x_n (−230<xi<230-2^{30} < x_i < 2^{30})을 출력한다. 가능한 답이 여러 개이면 그중 아무것이나 출력해도 된다. 답은 항상 존재하는 것으로 알려져 있다.

힌트

예제에서 학생들은 a1+4a2a_1 + 4a_2가 3으로 나누어떨어지도록 a1a_1과 a2a_2를 골라야 한다. 가능한 풀이는 두 가지다. a1=1a_1 = 1, a2=−1a_2 = -1이면 a1+4a2=1−4=−3a_1 + 4a_2 = 1 - 4 = -3으로 3으로 나누어떨어지고, a1=−1a_1 = -1, a2=1a_2 = 1이면 a1+4a2=−1+4=3a_1 + 4a_2 = -1 + 4 = 3으로 역시 나누어떨어진다. 교수님의 요구 조건이 충족된다.

예제1

  1. 예제 1

    입력
    2
    1 -1
    
    예상 출력
    3
    1 4