Cho dãy \(n\) số nguyên \(A_1, A_2, \dots, A_n\) và một số nguyên \(M\). Giữ nguyên thứ tự các số, ta chèn vào mỗi trong \(n-1\) khoảng giữa hai số liên tiếp một trong hai dấu + hoặc -, được một biểu thức. Ví dụ với dãy \([3, 4, 5]\) ta có thể tạo ra \(3+4-5\), giá trị bằng \(2\).
Hãy liệt kê tất cả các biểu thức có giá trị đúng bằng \(M\).
Cách in biểu thức. Số đầu tiên được in nguyên dạng \(A_1\) (kèm dấu - nếu âm). Với \(i \ge 2\), ta in dấu hiệu dụng rồi đến giá trị tuyệt đối \(|A_i|\), trong đó dấu hiệu dụng là dấu mà \(|A_i|\) thực sự đóng góp vào tổng: nếu chèn + trước \(A_i\) thì dấu hiệu dụng là dấu của \(A_i\), nếu chèn - thì là dấu ngược lại (khi \(A_i = 0\) thì lấy đúng dấu được chèn). Chẳng hạn với dãy \([2, -3, 0]\), việc chèn - trước \(-3\) được in là +3, và hai cách chèn dấu trước số \(0\) cho hai biểu thức khác nhau 2+3+0 và 2+3-0. Nhờ vậy các biểu thức không có khoảng trắng và mỗi cách chèn dấu cho ra đúng một dòng.
Input
- Dòng đầu gồm hai số nguyên \(n\) và \(M\).
- Dòng thứ hai gồm \(n\) số nguyên \(A_1, \dots, A_n\).
Output
In mỗi biểu thức thỏa mãn trên một dòng, theo thứ tự từ điển tăng dần của xâu ký tự (theo mã ASCII, tức + đứng trước -). Nếu không có biểu thức nào thì không in gì.
Constraints
- \(1 \le n \le 21\), \(|M| \le 2 \cdot 10^9\)
- \(|A_i| \le 10^9\)
Sample Input 1
4 4
6 3 -2 1
Sample Output 1
6-3+2-1
Sample Input 2
4 6
3 -2 0 5
Sample Output 2
3-2+0+5
3-2-0+5
Explanation
Ở ví dụ 2, chèn + trước \(-2\) (đóng góp \(-2\)), rồi +0 hoặc -0 (đóng góp \(0\)), rồi + trước \(5\): giá trị \(3-2+0+5 = 6\). Hai cách chèn dấu khác nhau ở số \(0\) nên có hai dòng.
Bình luận
Đăng nhập để bình luận
Chưa có bình luận nào.