Sinh test

View as PDF

Time limit: 1.0s , Memory limit: 250M , Points: 20 (partial)

Để sinh dữ liệu test cho các bài toán thi là một dãy gồm m phần tử có giá trị đôi một khác nhau và tăng dần, Hải dùng cách sau: Xét một dãy gồm n số, bằng cách kết hợp chúng lại với nhau (thực hiện phép toán cộng) để có thể tạo ra được các con số khác nhau và chỉ cần in ra theo thứ tự tăng dần sẽ có được một dãy phần tử cần tìm, ví dụ xét dãy ba số là: 1, 3, 6 bằng cách kết hợp sẽ sinh ra tối đa bảy số khác nhau là: 1, 3, 4, 6, 7, 910.

Tuy nhiên, Hải không biết lập trình và cũng chưa tính được có thể tạo được tối đa bao nhiêu con số khác nhau sinh ra theo quy tắc trên từ n phần tử cho trước. Hãy lập trình giúp Hải.

Input

Dòng đầu tiên là số nguyên dương n thỏa 1 \le n \le 100.

Dòng thứ hai chứa giá trị của các phần tử a_i, các phần tử cách nhau ký tự trắng và thỏa 1 \le a_i \le 1000.

Output

Dòng đầu tiên in ra số m là số cách kết hợp.

Dòng tiếp theo in m số theo thứ tự tăng dần, các số cách nhau ký tự trắng.

Samples

Sample Input 1
3
3 1 6
Sample Output 1
7
1 3 4 6 7 9 10
Sample Input 2
5
3 3 6 7 9
Sample Output 2
15
3 6 7 9 10 12 13 15 16 18 19 21 22 25 28

Comments