Cho xâu ~S~ chỉ gồm các ký tự <
, >
, {
, }
,[
, ]
, (
, )
. Các ký tự này chia thành hai nhóm: nhóm dấu ngoặc đóng >
, }
, ]
, )
và nhóm dấu ngoặc mở <
, {
, [
, (
. Có thể thay thế bất kì dấu ngoặc nào thuộc cùng một nhóm cho nhau. Chẳng hạn, có thể thay thế <
bằng {
, nhưng không được thay thế <
bằng )
hay >
.
Một dãy dấu ngoặc đúng là một dãy các ký tự <
, >
, {
, }
,[
, ]
, (
, )
được định nghĩa như sau:
- Dãy rỗng là dãy ngoặc đúng.
- Nếu ~A~ và ~B~ là dãy ngoặc đúng thì
<A>B
,{A}B
,[A]B
,(A)B
cũng là dãy ngoặc đúng. - Nếu ~A~ và ~B~ là dãy ngoặc đúng thì
AB
cũng là dãy ngoặc đúng.
Ví dụ: Xâu [[(){}]<>]
là dãy ngoặc đúng. Xâu [)()
và ][()()
không phải là dãy ngoặc đúng.
Yêu cầu
Hãy xác định số ít nhất các lần thay thế dấu ngoặc để xâu ~S~ trở thành dãy ngoặc đúng.
Dữ liệu vào
Gồm một dòng chứa xâu ~S~ khác rỗng. Độ dài của xâu ~S~ không quá ~10^6~.
Kết quả ra
Nếu không thể thay thế các dấu ngoặc để xâu ~S~ trở thành dãy ngoặc đúng thì xuất ra màn hình ~-1~. Ngược lại xuất ra màn hình số ít nhất các lần thay thế dấu ngoặc để xâu ~S~ trở thành dãy ngoặc đúng.
Sample Input 1
[<}){}
Sample Output 1
2
Sample Input 2
]]
Sample Output 2
-1
Comments