# 문제 설명
# 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 
# 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 
# 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 
# 알고리즘을 공부하고 있습니다.
# 간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 
# 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 
# 예를 들면, "abcabcdede"와 같은 문자열은 전혀 압축되지 않습니다. 
# "어피치"는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로 잘라서 압축하여 
# 더 짧은 문자열로 표현할 수 있는지 방법을 찾아보려고 합니다.

# 예를 들어, "ababcdcdababcdcd"의 경우 문자를 1개 단위로 자르면 전혀 압축되지 않지만, 
# 2개 단위로 잘라서 압축한다면 "2ab2cd2ab2cd"로 표현할 수 있습니다. 
# 다른 방법으로 8개 단위로 잘라서 압축한다면 "2ababcdcd"로 표현할 수 있으며, 이때가 가장 짧게 압축하여 표현할 수 있는 방법입니다.

# 다른 예로, "abcabcdede"와 같은 경우, 문자를 2개 단위로 잘라서 압축하면 "abcabc2de"가 되지만, 
# 3개 단위로 자른다면 "2abcdede"가 되어 3개 단위가 가장 짧은 압축 방법이 됩니다. 
# 이때 3개 단위로 자르고 마지막에 남는 문자열은 그대로 붙여주면 됩니다.

# 압축할 문자열 s가 매개변수로 주어질 때, 
# 위에 설명한 방법으로 1개 이상 단위로 문자열을 잘라 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 
# solution 함수를 완성해주세요.

# 제한사항
# s의 길이는 1 이상 1,000 이하입니다.
# s는 알파벳 소문자로만 이루어져 있습니다.
# 입출력 예
# s	result
# "aabbaccc"	7
# "ababcdcdababcdcd"	9
# "abcabcdede"	8
# "abcabcabcabcdededededede"	14
# "xababcdcdababcdcd"	17
# 입출력 예에 대한 설명
# 입출력 예 #1

# 문자열을 1개 단위로 잘라 압축했을 때 가장 짧습니다.

# 입출력 예 #2

# 문자열을 8개 단위로 잘라 압축했을 때 가장 짧습니다.

# 입출력 예 #3

# 문자열을 3개 단위로 잘라 압축했을 때 가장 짧습니다.

# 입출력 예 #4

# 문자열을 2개 단위로 자르면 "abcabcabcabc6de" 가 됩니다.
# 문자열을 3개 단위로 자르면 "4abcdededededede" 가 됩니다.
# 문자열을 4개 단위로 자르면 "abcabcabcabc3dede" 가 됩니다.
# 문자열을 6개 단위로 자를 경우 "2abcabc2dedede"가 되며, 이때의 길이가 14로 가장 짧습니다.

# 입출력 예 #5

# 문자열은 제일 앞부터 정해진 길이만큼 잘라야 합니다.
# 따라서 주어진 문자열을 x / ababcdcd / ababcdcd 로 자르는 것은 불가능 합니다.
# 이 경우 어떻게 문자열을 잘라도 압축되지 않으므로 가장 짧은 길이는 17이 됩니다.


# def solution(word):
#     length = len(word)
#     result = int(1e9)
#     for i in range(1,length//2 +1):
#         count = 0
#         same_count = 0
#         for j in range(0,length,i):
#             if word[0:i] != word[i:i+i]:
#                 break
#             if word[j:j+i] == word[j+i:j+(i*2)]:
#                 same_count +=1
#             else:
#                 count +=1
#                 if same_count >= 1:
#                     count+=1
#                     same_count = 0
#         if count != 0:
#             result = min(result,count)
#     if result == int(1e9):
#         result = length
#     return result

def solution(s):
    answer = len(s)
    #1개 단위부터 압축 단위를 늘려가며 확인
    for step in range(1,len(s)//2 +1):
        compressed = ''
        prev = s[0:step]  #앞에서부터 step까지 문자열 추출
        count = 1

        #step 만큼 진행하며 단위문자 (prev) 와 연속되는지 확인
        for j in range(step, len(s), step):     #이미 추출한 prev를 제외한 step부터 문자열 끝까지 step 만큼 진행
            # 문자열이 연속되어 있다면 압축 횟수 증가
            if prev == s[j:j+step]:
                count +=1
            # 문자열이 연속되어 있지 않다면
            else:
                compressed += str(count) + prev if count >= 2 else prev
                #압축횟수 + 압축한 문자열 //만약 압축횟수가 1이라면 문자열이 한번도 연속되지 않은 것이기 때문에 그냥 문자열을 입력.
                prev = s[j:j+step]      #다시 다음 문자열이 연속되는지 확인
                count = 1
        
        #단위가 커서 애초에 문자열이 연속되지 않게 되면 뒤에 문자열이 남게 된다. 다음 처리로 문자열을 완성한다.
        compressed += str(count) + prev if count >= 2 else prev
        answer = min(answer,len(compressed))        #완성된 문자열 중 가장 짧은게 정답이 된다.
    return answer

word = input()
print(solution(word))