import java.util.*;

class Solution {
    public int solution(String s) {
        StringBuilder sb = new StringBuilder(s);
        int ans = 0;
        for(int i = 0;i<sb.length();i++){
            sb.append(sb.charAt(0));
            sb.deleteCharAt(0);
            if(check(sb.toString())) ++ans;
        }
        
        return ans;
    }
    
    private static boolean check(String s){
        if(s.charAt(0) == ']' || s.charAt(0) == ')' || s.charAt(0) == '}') return false;
        
        Stack<Character> stack = new Stack<>();
        
        for(int i=0 ; i<s.length() ; i++){
            char c = s.charAt(i);
            if(c == ']' || c == ')' || c == '}'){
                if(stack.isEmpty()) return false;
                
                if(stack.peek() == '['){
                    if(c != ']') return false;
                    stack.pop();
                }
                else if(stack.peek() == '('){
                    if(c != ')') return false;
                    stack.pop();
                }
                else if(stack.peek() == '{'){
                    if(c != '}') return false;
                    stack.pop();
                }
            }else{
                stack.push(c);
            }
        }
        return stack.isEmpty();
    }
}
import java.util.Stack;

public class Solution {

    private boolean isCorrect(char[] str, int offset) {
        Stack<Character> stack = new Stack<>();

        for (int i = 0; i < str.length; i++) {
            char c = str[(offset + i) % str.length];
            switch (c) {
                case '(' -> stack.push(')');
                case '{' -> stack.push('}');
                case '[' -> stack.push(']');
                case ')', '}', ']' -> {
                    if (stack.isEmpty()) return false;
                    if (stack.pop() != c) return false;
                }
            }
        }

        return stack.isEmpty();
    }

    public int solution(String s) {
        char[] str = s.toCharArray();

        int count = 0;
        for (int offset = 0; offset < str.length; offset++) {
            if (isCorrect(str, offset)) {
                count++;
            }
        }
        return count;
    }
}