The bear has a string *s* = *s*<sub class="lower-index">1</sub>*s*<sub class="lower-index">2</sub>... *s*<sub class="lower-index">|*s*|</sub> (record |*s*| is the string's length), consisting of lowercase English letters. The bear wants to count the number of such pairs of indices *i*, *j* (1 ≤ *i* ≤ *j* ≤ |*s*|), that string *x*(*i*, *j*) = *s*<sub class="lower-index">*i*</sub>*s*<sub class="lower-index">*i* + 1</sub>... *s*<sub class="lower-index">*j*</sub> contains at least one string "bear" as a substring.

String *x*(*i*, *j*) contains string "bear", if there is such index *k* (*i* ≤ *k* ≤ *j* - 3), that *s*<sub class="lower-index">*k*</sub> = *b*, *s*<sub class="lower-index">*k* + 1</sub> = *e*, *s*<sub class="lower-index">*k* + 2</sub> = *a*, *s*<sub class="lower-index">*k* + 3</sub> = *r*.

Help the bear cope with the given problem.
The first line contains a non-empty string *s* (1 ≤ |*s*| ≤ 5000). It is guaranteed that the string only consists of lowercase English letters.

def checkSubSequence(startIdx, endIdx, stringOne, stringTwo):
    idxOne = startIdx
    idxTwo = 0
    while(idxOne <= endIdx and idxTwo < len(stringTwo) and stringOne[idxOne] == stringTwo[idxTwo]):
        idxOne += 1
        idxTwo += 1

    return idxTwo == len(stringTwo) and idxOne > endIdx


def isSubString(stringOne, stringTwo, endIdx, startIdx):
    state = False
    for i in range(startIdx, endIdx):
        if endIdx - startIdx + 1 < 4:
            break
        if checkSubSequence(i, endIdx, stringOne, stringTwo):
            state = True
            cache[startIdx].append((i, endIdx))
    return state


def getCount(startIdx, endIdx, string):
    currentMax = float('inf')
    count = 0
    for i in range(endIdx, len(string)):
        if isSubString(string, "bear", i, startIdx):
            currentMax = min(currentMax, i)
    count += len(string) - currentMax
    return count


def binarySearch(startIdx, array, string):
    leftPointer = 0
    rightPointer = len(array) - 1
    currentMax = float('-inf')
    while(rightPointer >= leftPointer):
        middlePointer = (rightPointer + leftPointer) // 2
        leftMax, rightMax = array[middlePointer]
        if leftMax >= startIdx:
            currentMax = max(currentMax, len(string) - rightMax)
            rightPointer = middlePointer - 1
        else:
            leftPointer = middlePointer + 1
    # print([startIdx, currentMax])
    return currentMax


string = input()
count = 0
cache = {i: [] for i in range(len(string))}

currentCount = getCount(0, 3, string)


for startIdx in range(1, len(string)):
    currentMax = binarySearch(startIdx, cache[0], string)
    if currentMax == float('-inf'):
        break
    count += currentMax


count += currentCount
print(count)
