Sum It Up

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

문제

목표 합 $t$와 $n$개의 양의 정수로 이루어진 목록이 주어진다. 목록에서 수들을 골라 그 합이 정확히 $t$가 되는 서로 다른 모든 방법을 찾아라. 각 수는 목록에 나타난 횟수만큼만 하나의 합에서 사용할 수 있으며, 수 하나만으로도 하나의 합으로 센다. 예를 들어 $t = 4$이고 목록이 $[4, 3, 2, 2, 1, 1]$이면 $4$가 되는 서로 다른 합은 $4$, $3+1$, $2+2$, $2+1+1$의 네 가지이다.

입력

입력에는 한 줄에 하나씩 하나 이상의 테스트 케이스가 주어진다. 각 줄에는 합 $t$, 목록의 원소 개수 $n$, 그리고 목록의 값 $x_1, x_2, \ldots, x_n$이 이 순서대로 공백 하나로 구분되어 주어진다. $n$이 $0$인 줄은 입력의 끝을 나타내며 처리하지 않는다. 실제 테스트 케이스에서는 $1 \le t < 1000$, $1 \le n \le 12$이고 각 $1 \le x_i < 100$이다. 목록의 값은 큰 값부터 작은 값 순서(비증가 순서)로 주어지며 같은 값이 여러 번 나올 수 있다.

출력

각 테스트 케이스마다 먼저 Sums of <t>: 형식의 줄을 출력한다(단어 Sums of, 공백, 합 $t$, 콜론). 그다음 조건을 만족하는 각 합을 한 줄에 하나씩, 항들을 +로 이어 출력한다. 만족하는 합이 없으면 NONE이라는 한 줄만 출력한다. 하나의 합 안에서 수들은 비증가 순서로 나열하며, 각 값은 목록에 나타난 횟수까지만 반복할 수 있다. 합들은 항의 사전식 내림차순으로 정렬한다. 즉 첫 번째 항으로 비교하고, 같으면 두 번째 항, 그다음 세 번째 항 순서로 비교한다. 한 테스트 케이스 안의 모든 합은 서로 달라야 한다.