import math
import copy

def eratosthenes(num):
    num = int(math.floor(num))
    sieve = [True for i in range(num+1)]
    sieve[0] = False #0 is not prime
    sieve[1] = False #1 is not prime
    for i in range(2,num+1):
        for j in range(i+i,num+1,i):
            # print(j)
            sieve[j] = False
    return sieve

def list_to_int(ls):
    if not ls:
        return 0
    return int(''.join(ls))

def int_to_list(num):
    return list(str(num))

# for i,t in enumerate(eratosthenes(25)):
#     print(f"{i} {t}")
made_primes ={}

def proc_ls_num(num, cur_cnt):
    # print("CALLED: ", num, "with ", cur_cnt)
    for i in range(len(num)):
        num_cp = copy.copy(num)
        num_cp.pop(i)
        numeral = list_to_int(num_cp)
        # print(numeral)
        if numeral ==0:
            continue
        if is_prime(numeral):
            # print(numeral)
            val = made_primes.get(numeral,0)
            new_cnt = max(val,cur_cnt+1)
            made_primes[numeral] = new_cnt
            proc_ls_num(int_to_list(numeral), new_cnt)
            
def is_prime(num):
    if num ==1:
        return False
    for p in primes:
        if num ==p:
            continue
        if num % p ==0:
            return False
    return True  


N = list(input())
numeric = list_to_int(N)
if numeric == 0 or numeric == 1:
    print(0)
else:
    sieve =eratosthenes(math.sqrt(list_to_int(N)))
    primes = [p for p,x in enumerate(sieve) if x]
    # print(is_prime(list_to_int(N)))
    start = 1 if is_prime(list_to_int(N)) else 0
    if start != 1:
        print(0)
    else:
        if start == 1:
            made_primes[list_to_int(N)] = 1
        proc_ls_num(N,start)
        # print(made_primes)
        if made_primes:
            print(max(made_primes.values()))
        else:
            print(0)




# print(primes)
# proc_ls_num(N,)
# print(list_to_int(N))
