# Task
 You're given a substring s of some cyclic string. What's the length of the smallest possible string that can be concatenated to itself many times to obtain this cyclic string?

# Example

 For` s = "cabca"`, the output should be `3`

 `"cabca"` is a substring of a cycle string "abcabcabcabc..." that can be obtained by concatenating `"abc"` to itself. Thus, the answer is 3.

# Input/Output


 - `[input]` string `s`

  Constraints: `3 ≤ s.length ≤ 15.`
  

 - `[output]` an integer

Source: codewars | Difficulty: EASY
Tags: Ad-hoc

Starter code: def cyclic_string(s):
	

Solutions:
def cyclic_string(s):
	return next((i for (i, _) in enumerate(s[1:], 1) if s.startswith(s[i:])), len(s))


import math

def cyclic_string(s):
	for l in [i for (i, ch) in enumerate(s) if ch == s[0]][1:]:
		if (s[:l] * math.ceil(len(s) / l))[:len(s)] == s:
			return l
	return len(s)


from itertools import cycle

def cyclic_string(s):
	i = 0
	while True:
		i = s.find(s[0], i + 1)
		if i == -1:
			return len(s)
		if all((c1 == c2 for (c1, c2) in zip(cycle(s[:i]), s[i:]))):
			return i


def cyclic_string(s):
	length = len(s)
	for i in range(1, length + 1):
		if s in s[:i] * length:
			return i


def cyclic_string(s):
	l = len(s)
	for i in range(1, l + 1):
		if s in s[:i] * l:
			return i


def cyclic_string(s):
	i = 1
	while not s.startswith(s[i:]):
		i += 1
	return i


def cyclic_string(s):
	for i in range(1, len(s)):
		if s in s[:i] * (len(s) // i) * 2:
			return i
	return len(s)


def cyclic_string(st):
	for x in range(1, len(st) + 1):
		aux = st[:x] * len(st)
		if aux.startswith(st):
			break
	return x


def cyclic_string(s):
	if len(set(s)) == 1:
		return 1
	alist = []
	for i in s:
		alist.append(i)
		if s in ''.join(alist) * 15:
			return len(alist)