Bracket Circle

View as PDF

Submit solution

Points: 0.10 (partial)
Time limit: 1.0s
Memory limit: 256M

Problem type
Allowed languages
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Ban đầu bạn được cho một dãy ngoặc đúng ~S~. Gọi ~S'~ là một dãy ngoặc đúng bất kì thu được bằng cách xoay tròn ~S~ với số lần tùy ý.

Nhiệm vụ là đếm số lượng ~S'~ phân biệt.

Dãy ngoặc đúng: Một dãy ngoặc ~S~ được gọi là đúng khi thỏa một trong các điều kiện:

  • ~S = ( T )~ với ~T~ là một dãy ngoặc đúng.
  • ~S = S_1 + S_2~ với ~S_1~ và ~S_2~ là các dãy ngoặc đúng.

Ví dụ: ~()~, ~()(())~, ~(()())~ là các dãy ngoặc đúng. ~)~, ~(()~ không phải dãy ngoặc đúng.

Xoay tròn: Một phép xoay tròn của một xâu là mang kí tự cuối của xâu đó về vị trí đầu, ví dụ ~S_1S_2..S_{n-1}S_{n}~ sau khi xoay tròn sẽ thành ~S_{n}S_1S_2..S_{n-1}~.

Ví dụ: ~(())~ sau khi xoay tròn sẽ thành ~)(()~.

Input

Dòng đầu chứa số nguyên dương ~N~ - độ dài của dãy ngoặc đúng ~S~.

Dòng thứ hai chứa dãy ngoặc đúng ~S~ bất kì.

Output

Số lượng ~S'~ phân biệt là dãy ngoặc đúng thu được khi xoay tròn ~S~.

Scoring

  • Subtask 1 (50%): ~|S| \leq 2 * 10^3~
  • Subtask 2 (50%): ~|S| \leq 2 * 10^6~

Sample input 1

4
(())

Sample output 1

1

Sample input 2

6
()(())

Sample output 2

2

Notes

Ở ví dụ 1 chỉ duy nhất ~(())~ là dãy ngoặc đúng.

Ở ví dụ 2 có 2 dãy ngoặc đúng là ~()(())~ và ~(())()~.


Comments

Please read the guidelines before commenting.


There are no comments at the moment.