CF BUDDY
← Problems·

1694B · Paranoid String

1200 · constructive algorithms, greedy

Problem: Let's call a binary string TT of length mm indexed from 11 to mm paranoid if we can obtain a string of length 11 by performing the following two kinds of operations m1m-1 times in any order :

  • Select any substring of TT that is equal to 01, and then replace it with 1.
  • Select any substring of TT that is equal to 10, and then replace it with 0.For example, if T=T = 001, we can select the substring [T2T3][T_2T_3] and perform the first operation. So we obtain T=T = 01.

You are given a binary string SS of length nn indexed from 11 to nn. Find the number of pairs of integers (l,r)(l, r) 1lrn1 \le l \le r \le n such that S[lr]S[l \ldots r] (the substring of SS from ll to rr) is a paranoid string.

Input Format: The first line contains an integer tt (1t10001 \le t \le 1000) — the number of test cases. The description of test cases follows.

The first line of each test case contains a single integer nn (1n21051 \le n \le 2 \cdot 10^5) — the size of SS.

The second line of each test case contains a binary string SS of nn characters S1S2SnS_1S_2 \ldots S_n. (Si=S_i = 0 or Si=S_i = 1 for each 1in1 \le i \le n)

It is guaranteed that the sum of nn over all test cases doesn't exceed 21052 \cdot 10^5.

Output Format: For each test case, output the number of pairs of integers (l,r)(l, r) 1lrn1 \le l \le r \le n such that S[lr]S[l \ldots r] (the substring of SS from ll to rr) is a paranoid string.

Note: In the first sample, SS already has length 11 and doesn't need any operations.

In the second sample, all substrings of SS are paranoid. For the entire string, it's enough to perform the first operation.

In the third sample, all substrings of SS are paranoid except [S2S3][S_2S_3], because we can't perform any operations on it, and [S1S2S3][S_1S_2S_3] (the entire string).

Sample Cases

Case 1

Input

5
1
1
2
01
3
100
4
1001
5
11111

Output

1
3
4
8
5

Similar problems

00:00:00
Loading editor…
Welcome! I'm your coding tutor for this problem. Use the chips below to reveal stored hints or get AI feedback on your code. I'll guide you step by step — never giving away the solution.

Sign in to unlock AI tutor feedback