import java.util.Scanner;
import java.util.Stack;
// 参考:https://blog.nowcoder.net/n/6becba2a332248a4a9e5530878146159
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String str = in.next();
System.out.println(check(str));
}
static boolean check(String s) {
Stack<Character> st = new Stack<>();
// 括号匹配问题 : ab[()]cd
// [ or ( 入栈
// 遍历字符序列,如果当前为] 或 )
// 弹出栈顶元素,如果栈顶不为 [ 或 (,则括号配对失败;如果是,继续
// 遍历结束,检查栈中是否还有元素,如果有,匹配失败,没有,则匹配成功
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(' || c == '[') {
st.push(c);
} else if (c == ']') {
if (st.empty() || st.peek() != '[') {
return false;
}
st.pop();
} else if (c == ')') {
if (st.empty() || st.peek() != '(') {
return false;
}
st.pop();
}
}
return st.empty();
}
}