# 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

Difficulty: introductory

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)):
        # Check to see if s is in the first i characters repeated enough to be of len(s) 
        if s in s[:i] * (len(s) // i) * 2:
            return i
    # Must use whole string
    return len(s)

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

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)