import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean is_valid_cow_communication (String s) {
        // write code here
        Stack<Character> st = new Stack<>();
        char[] arr = s.toCharArray();
        st.push(arr[0]);
        int i = 1;
        while(!st.isEmpty() && i < arr.length){
		  // 在栈不为空且还有元素未入栈的情况下,如果栈顶元素与当前元素匹配就让栈顶元素出栈,完成匹配
            while(i < arr.length && !st.isEmpty() && check(st.peek(), arr[i])){
                st.pop();
                i++;
            }
		  // 否则,让当前元素入栈
            if(i < arr.length)st.push(arr[i++]);
        }
        return st.isEmpty();
    }
    private boolean check(char a, char b){
        if(a == '(' && b == ')' || a == '{' && b == '}' || a == '[' && b == ']')
            return true;
        else return false;
    }
}