Bài toán chi phí với dãy ngoặc đúng

Xem PDF



Tác giả:
Dạng bài
Điểm: 580 Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Một dãy ngoăc đơn được gọi là dãy ngoặc đúng nếu ta thêm dấu + và số 1 vào nó thì ta được một biểu thức toán học đúng.

Ví dụ: "(())()", "()" là các dãy ngoặc đúng , còn ")(", "(()" and "(()))(" không phải là dãy ngoặc đúng.

Yêu cầu:

  • Cho một chuỗi \(S\) chỉ gồm các kí tự ?, )(. Hãy thay tất cả các dấu ? có trong \(S\) bằng các kí tự ( hoặc ) với chi phí cho trước, sao cho \(S\) là một dãy ngoặc đúng và chi phí thay thế là nhỏ nhất.

Input

  • Dòng thứ nhất chứa xâu \(S\) có độ dài không quá \(5.10^4\)

  • \(m\) dòng tiếp theo, mỗi dòng gồm hai số nguyên \(a_i,b_i(1\le a_i,b_i\le 10^6)\) - Trong đó: \(m\) là số lượng dấu ? có trong xâu \(S\), \(a_i\) là chi phí thay thế dấu ? thứ \(i\) bởi dấu ( còn \(b_i\) là chi phí thay thế dấu ? thứ \(i\) bởi )

Output

  • Dòng thứ nhất chứa chi phí tối thiểu cần dùng

  • Dòng thứ hai, in ra dãy ngoặc đúng tương ứng với chi phí trên.

Chú ý: Nếu có nhiều đáp án thoả mãn yêu cầu bài toán, in ra bất kì, ngược lại nếu không có cách thay thế nào thoả mãn, in ra -1

Example

Test 1

Input
((??()))??
1 2
2 3
3 4
4 1
Output
8
(()(()))()

Bình luận

Không có bình luận nào.