#include <iostream>
#include <vector>
#include <stack>
#include <string>
using namespace std;
bool isValidBracketSequence(const string& s) {
vector<char> brackets;
// 1. 提取所有括号字符
for (char c : s) {
if (c == '(' || c == ')' || c == '[' || c == ']') {
brackets.push_back(c);
}
}
stack<char> stk;
// 2. 检查括号序列是否合法
for (char bracket : brackets) {
if (bracket == '(' || bracket == '[') {
// 如果是左括号,压入栈
stk.push(bracket);
} else {
// 如果是右括号
if (stk.empty()) {
// 栈为空,但遇到了右括号,说明没有匹配的左括号
return false;
}
char top = stk.top();
stk.pop();
// 检查括号是否匹配
if ((bracket == ')' && top != '(') ||
(bracket == ']' && top != '[')) {
return false;
}
}
}
// 3. 遍历结束后,栈必须为空才是完全匹配
return stk.empty();
}
int main() {
string input;
getline(cin, input);
bool result = isValidBracketSequence(input);
cout << (result ? "true" : "false") << endl;
return 0;
}