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 đúng một trong ba dấu phép toán +, -, *, tạo thành một biểu thức. Biểu thức được tính theo quy tắc toán học thông thường: phép nhân được thực hiện trước, sau đó mới đến cộng và trừ. Ví dụ với dãy \([3, 4, 5]\), biểu thức 3+4*5 có giá trị \(23\).
Hãy liệt kê tất cả các biểu thức có giá trị đúng bằng \(M\).
Các số được viết đúng như trong dữ liệu, số âm giữ nguyên dấu trừ (ví dụ 2+-3, 4*-1, 5--2). Biểu thức không chứa khoảng trắ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: * đứng trước +, + đứng trước -). Nếu không có biểu thức nào thì không in gì.
Với \(n = 1\), biểu thức chỉ gồm số \(A_1\) và được in ra nếu \(A_1 = M\).
Constraints
- \(1 \le n \le 16\)
- \(|M| \le 2 \cdot 10^{18}\)
- \(|A_i| \le 10^9\)
- Giá trị trung gian của biểu thức có thể rất lớn; kết quả so sánh với \(M\) là giá trị toán học chính xác.
- Để dữ liệu ra không quá lớn, số biểu thức thỏa mãn không quá \(5 \cdot 10^5\).
Sample Input
5 18
2 3 4 -1 5
Sample Output
2*3*4+-1-5
2+3*4+-1+5
Explanation
\(2 \cdot 3 \cdot 4 + (-1) - 5 = 24 - 1 - 5 = 18\) và \(2 + 3 \cdot 4 + (-1) + 5 = 2 + 12 - 1 + 5 = 18\). Không còn cách nào khác cho giá trị \(18\).
Bình luận
Đăng nhập để bình luận
Chưa có bình luận nào.