만드는 중입니다

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

피보나치 곱셈

시간 제한20초메모리 제한1024 MB

요약
피보나치 체계로 표현된 두 양의 정수 x, y를 입력받아 곱 x×y를 같은 형식의 피보나치 표현으로 출력합니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 문자열, 수학
정답자
아직 제출이 없습니다

문제

위대한 정보학자 Bajtazar는 15년 넘게 특이한 컴퓨터를 만들고 있습니다. 이 컴퓨터는 수를 피보나치 수 체계로 나타냅니다. 각 수는 서로 다르고 인접하지 않은 피보나치 수의 합으로 쓰입니다.

정의를 정확히 적으면 다음과 같습니다. F1=1F_1 = 1, F2=2F_2 = 2이고, i≥3i \ge 3일 때 Fi=Fi−1+Fi−2F_i = F_{i-1} + F_{i-2}입니다. 모든 양의 정수 xx는 어떤 n≥1n \ge 1에 대해 비트열 (b1,b2,…,bn)(b_1, b_2, \ldots, b_n)으로 유일하게 표현되며, 이 비트열은 다음 조건을 만족합니다.

  • x=b1F1+b2F2+…+bnFnx = b_1F_1 + b_2F_2 + \ldots + b_nF_n
  • 모든 1≤i<n1 \le i < n에 대해 bi∈{0,1}b_i \in \{0, 1\}이고, bn=1b_n = 1입니다. 앞자리 0은 없습니다.
  • 모든 1≤i<n1 \le i < n에 대해 bibi+1=0b_ib_{i+1} = 0입니다. 인접한 두 1은 없습니다.

예를 들어 2=(0,1)2 = (0, 1), 4=(1,0,1)4 = (1, 0, 1), 5=(0,0,0,1)5 = (0, 0, 0, 1), 20=(0,1,0,1,0,1)20 = (0, 1, 0, 1, 0, 1)입니다. 2020은 F2+F4+F6=2+5+13F_2 + F_4 + F_6 = 2 + 5 + 13이기 때문입니다.

오래전 Bajtazar는 올림피아드 참가자들에게 피보나치 수 체계에서 덧셈을 구현하는 일을 도와 달라고 부탁했습니다. 이 이야기는 XII OI 2단계 '피보나치 합' 문제와 함께 올림피아드의 '파란 책'에 실렸습니다. 이번 문제는 더 어렵고, Bajtazar는 여러 해째 이 문제를 붙잡고 있습니다. 그래서 Potyczki Algorytmiczne 참가자들에게 조언을 구합니다. 곱셈을 구현하는 일을 도와주세요!

입력

첫 줄에는 테스트 케이스의 수 tt (1≤t≤10001 \le t \le 1000)가 주어집니다. 이어서 2t2t개의 줄에 테스트 케이스가 한 개씩 두 줄로 주어집니다. 각 케이스의 첫 줄에는 양의 정수 xx의 피보나치 수 체계 표현이 주어집니다. 먼저 길이 nn이 나오고, 그다음 nn개의 비트 b1,b2,…,bnb_1, b_2, \ldots, b_n이 나옵니다. 둘째 줄에는 같은 형식으로 yy의 표현이 주어집니다. 입력에 있는 모든 표현의 길이 합은 10610^6을 넘지 않습니다.

출력

각 테스트 케이스마다 곱 x×yx \times y를 입력과 같은 형식으로 출력합니다. 먼저 길이 n′n'을, 그다음 n′n'개의 비트를 씁니다. 수들은 공백 한 칸으로 구분합니다. 입력과 출력의 표현은 문제의 조건을 만족해야 하므로, 비트열은 반드시 1로 끝나고 인접한 1이 없어야 합니다.

힌트

첫 번째 테스트 케이스에서는 (1,0,1)(1, 0, 1)과 (0,0,0,1)(0, 0, 0, 1)로 표현된 수를 곱합니다. 전개하면 (1F1+0F2+1F3)×(0F1+0F2+0F3+1F4)=(1+3)×5=20=F2+F4+F6(1F_1 + 0F_2 + 1F_3) \times (0F_1 + 0F_2 + 0F_3 + 1F_4) = (1 + 3) \times 5 = 20 = F_2 + F_4 + F_6입니다. 따라서 결과는 길이 6의 (0,1,0,1,0,1)(0, 1, 0, 1, 0, 1)입니다.

예제1

  1. 예제 1

    입력
    2
    3 1 0 1
    4 0 0 0 1
    2 0 1
    1 1
    
    예상 출력
    6 0 1 0 1 0 1
    2 0 1