만드는 중입니다

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

동전 집합 만들기

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

요약
정수 N이 주어질 때, 1원부터 N-1원까지는 탐욕 알고리즘이 최소 동전 수를 찾고 N원에서는 실패하는 동전 집합을 구합니다. 그런 집합이 없으면 -1을 출력합니다.
난이도

보통10점 중 7점

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

문제

거스름돈 문제는 가게에서 물건을 산 뒤 돌려줄 거스름돈을 가장 적은 개수의 동전으로 맞추는 문제이다. 동전 집합은 거스름돈을 만들 때 쓸 수 있는 동전 값들의 모음이다. 그리디 알고리즘은 남은 금액을 넘지 않는 동전 중 가장 큰 값을 반복해서 고르고, 거스름돈을 다 맞출 때까지 이 과정을 계속한다.

최적해는 가장 적은 개수의 동전을 쓰는 해이다. 그러나 그리디 알고리즘이 항상 최적해를 주지는 않으며, 특정 조건에서는 최적이 아닌 해를 줄 수 있다.

양의 정수 NN이 주어진다. 1원부터 (N−1)(N-1)원까지 모든 금액에 대해서는 그리디 알고리즘이 최적해를 주지만, NN원에 대해서는 최적해를 주지 않는 동전 집합을 찾아라. 값이 1인 동전은 항상 동전 집합에 포함된다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 다음 TT개의 줄에는 각각 정수 NN이 하나씩 주어진다.

출력

각 테스트 케이스마다 조건을 만족하는 동전 집합을 만들 수 없으면 -1을 출력한다.

만들 수 있으면 첫 줄에 동전 집합의 크기 KK를 출력한다. 다음 줄에는 동전 값 a1,a2,…,aKa_{1}, a_{2}, \ldots, a_{K}를 오름차순으로 공백으로 구분해 출력한다. 동전 집합의 크기는 최소일 필요는 없다.

제한

1≤T≤1 0001\le T\le 1\,000

1≤N≤1091\le N\le 10^{9}

1≤K≤301\le K\le 30

1=a1<a2<⋯<aK≤1091=a_{1}<a_{2}<\cdots <a_{K}\le 10^{9}

예제1

  1. 예제 1

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