def solution(s):
def get_divisors(n):
divisors = []
i = 1
while i <= n**0.5:
if n % i == 0:
if n // i == i:
divisors.append(i)
else:
divisors.extend([i, n // i])
i += 1
return divisors
n = len(s)
divisors = get_divisors(n)
divisors.sort()
for div in sorted(divisors, reverse=true):
valid = true
size = n // div
pattern = s[:size]
for i in range(size, n, size):
if s[i:i + size] != pattern:
valid = false
break
if valid:
return div
return 1
# Test cases
print solution("abcabcabcabc") # Output: 4
print solution("abccbaabccba") # Output: 2