#проверить является ли число простым

def prost(n):
    return n > 1 and all(n % d != 0 for d in range(2, int(n**0.5)+1))

#поиск всех делителей числа (включая 1 и само число)

def f(n):
    a = set()
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            a.add(i)
            a.add(n//i)
    return a

#поиск всех делителей исключая 1 и само число

def f(n):
    a = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            a.add(i)
            a.add(n//i)
    return a

#поиск всех простых делителей (не включая 1 и само число)

def f(n):
    a = set()
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            if prost(i):
                a.add(i)
            if prost(n//i):
                a.add(n//i)
    return a

#25 на маски

'''Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
1) символ «?» означает ровно одну произвольную цифру;
2) символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске 54?1?3*7, делящиеся на 18579 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 18579.
Количество строк в таблице для ответа избыточно.'''
#19255
from fnmatch import *

for i in range(18579, 10 ** 10 + 1, 18579): #начало и конец ставим на что делится число по условию
    if fnmatch(str(i), '54?1?3*7'): #маску пишем тут
        print(i , i // 18579)