from random import shuffle

def liczby_pierwsze_ponizej(n):
    sito = [True] * n
    wynik = []
    for i in range(2, n):
        if sito[i]:
            wynik.append(i)
            for j in range(i * i, n, i):
                sito[j] = False
    return wynik

def indeks_listy_zawierajacej_true(lista):
    for i, wartosc in enumerate(lista):
        if True in wartosc:
            return i

limit_liczb = 100000
liczby_pierwsze = liczby_pierwsze_ponizej(limit_liczb)
shuffle(liczby_pierwsze)
duza_liczba = list(input())
n = len(duza_liczba)
moze_byc_rozwiazaniem = [[True] * 10 for _ in range(n)]
moze_byc_rozwiazaniem[0][0] = False
for i in range(n):
    duza_liczba[i] = int(duza_liczba[i])
    moze_byc_rozwiazaniem[i][duza_liczba[i]] = False
potencjalne_rozwiazania = n * 9 - 1
for p in liczby_pierwsze:
    m = p
    while m * p < limit_liczb:
        m *= p
    reszta_kwadratowa_modulo_m = [False] * m
    for i in range(m):
        reszta_kwadratowa_modulo_m[i * i % m] = True
    reszta = 0
    for c in duza_liczba:
        reszta = (reszta * 10 + c) % m
    potega_10 = 1
    for i in reversed(range(n)):
        for j in range(10):
            if moze_byc_rozwiazaniem[i][j]:
                reszta_po_zmianie = (reszta + (j - duza_liczba[i]) * potega_10) % m
                if not reszta_kwadratowa_modulo_m[reszta_po_zmianie]:
                    moze_byc_rozwiazaniem[i][j] = False
                    potencjalne_rozwiazania -= 1
        potega_10 = potega_10 * 10 % m
    if potencjalne_rozwiazania == 1:
        pozycja = indeks_listy_zawierajacej_true(moze_byc_rozwiazaniem)
        print(pozycja + 1, moze_byc_rozwiazaniem[pozycja].index(True))
        break
