from collections import defaultdict from functools import reduce def set_order_partitions(n: int, yield_func): def recur(p: int, g: list[int]): if p == n: yield_func(g) return # 左隣のグループに属する g[p] = g[p-1] recur(p+1, g) # 新たなグループを作成する g[p] = g[p-1]+1 recur(p+1, g) assert n > 0 g = [0 for _ in range(n)] recur(1, g) def is_prime(n: int) -> bool: if n < 2: return False x = 2 while x * x <= n: if n % x == 0: return False x += 1 return True S = input() ds = [int(c) for c in S] ans = 0 def func(g: list[int]): global ans d = defaultdict(list) for i, p in enumerate(g): d[p].append(ds[i]) t = 0 for vs in d.values(): t += reduce(lambda a, b: 10*a+b, vs, 0) if is_prime(t): ans += 1 set_order_partitions(len(S), func) print(ans)