Problem:
Score : 400 points

Problem Statement

We have a string S of length N consisting of R, G, and B.

Find the number of triples (i,~j,~k)~(1 \leq i < j < k \leq N) that satisfy both of the following conditions:

S_i \neq S_j, S_i \neq S_k, and S_j \neq S_k.

j - i \neq k - j.

Constraints

1 \leq N \leq 4000

S is a string of length N consisting of R, G, and B.

Input

Input is given from Standard Input in the following format:

N
S

Output

Print the number of triplets in question.

Sample Input 1

4
RRGB

Sample Output 1

1

Only the triplet (1,~3,~4) satisfies both conditions. The triplet (2,~3,~4) satisfies the first condition but not the second, so it does not count.

Sample Input 2

39
RBRBGRBGGBBRRGBBRRRBGGBRBGBRBGBRBBBGBBB

Sample Output 2

1800

Solution in Fortran (GNU Fortran 9.2.1) (judge verdict: Runtime Error)

module a
  integer(8), allocatable :: anr(:), ang(:), anb(:)
end module a

program main
  use a
  
  implicit none
  integer(8) :: n, i, j, ans ,nr, ng, nb
  character(4000) :: s
  
  read(*,*) n
  allocate( anr(n) )
  allocate( ang(n) )
  allocate( anb(n) )
  read(*,*) s
  
  nr = 0
  ng = 0
  nb = 0
  do i = 1, n
    if( s(i:i) == "R" ) then
      nr = nr + 1
    else if( s(i:i) == "G" ) then
      ng = ng + 1
    else
      nb = nb + 1
    end if
  end do
  do i = 1, n
    if( s(i:i) == "R" ) then
      nr = nr - 1
    else if( s(i:i) == "G" ) then
      ng = ng - 1
    else
      nb = nb - 1
    end if
    anr(i) = nr
    ang(i) = ng
    anb(i) = nb
  end do
  ans = 0
  do i = 1, n-2
    do j = i+1, n-1
    if( s(i:i) == "R" ) then
      if( s(j:j) == "G" ) then
        ans = ans + anb(j) 
        if( s(2*j-i:2*j-i) == "B") ans = ans - 1
      end if
    end if
    if( s(i:i) == "R" ) then
      if( s(j:j) == "B" ) then
        ans = ans + ang(j) 
        if( s(2*j-i:2*j-i) == "G") ans = ans - 1
      end if
    end if
    if( s(i:i) == "G" ) then
      if( s(j:j) == "R" ) then
        ans = ans + anb(j) 
        if( s(2*j-i:2*j-i) == "B") ans = ans - 1
      end if
    end if
    if( s(i:i) == "G" ) then
      if( s(j:j) == "B" ) then
        ans = ans + anr(j) 
        if( s(2*j-i:2*j-i) == "R") ans = ans - 1
      end if
    end if
    if( s(i:i) == "B" ) then
      if( s(j:j) == "R" ) then
        ans = ans + ang(j) 
        if( s(2*j-i:2*j-i) == "G") ans = ans - 1
      end if
    end if
    if( s(i:i) == "B" ) then
      if( s(j:j) == "G" ) then
        ans = ans + anr(j) 
        if( s(2*j-i:2*j-i) == "R") ans = ans - 1
      end if
    end if
    end do
  end do

  print*, ans 

end program main