a와 b로만 이루어진 문자열 S가 있다. S의 부분 문자열 P가 S 안에서 서로 겹치지 않게 두 번 이상 나타나면 P는 좋은 부분 문자열이다. 다시 말해 P가 i번째 위치와 j번째 위치에서 시작해 나타나고 j−i가 P의 길이보다 크거나 같은 두 위치 i<j가 있으면, P는 좋은 부분 문자열이다.
S가 aaaabb이면 좋은 부분 문자열은 a, aa, b이다. aaa는 S에 두 번 나타나지만 두 등장이 겹치므로 좋은 부분 문자열이 아니다.
문자열 S가 주어졌을 때, 서로 다른 좋은 부분 문자열의 개수를 구하는 프로그램을 작성하시오.