N = 23332587631370509781500323957354327219676284677217281863533549646454004437689035605652329181018026064904369131820517785484473335533122769171076187532946154712298769204369694442811573239529601539256142975037081236264580179561109817196244433153796499468178290503661905546382796259683976997451609546102670334170120304633952224837461741166247824771391064203648934370203828599328191735898188627016767277275962510179712401320624605015789794100231096551999366843965858334534665437305158956095285581542450861483279959862411263801881452597174150702979434054713472808888169963650503970975034022520395680456262355557849765692733


def main():
    with open('key.txt') as f:
        a = f.readlines()
        p = int(a[0])
        q = int(a[1])
        d = int(a[2])
    assert p * q == N
    assert d * 65537 % ((p - 1) * (q - 1)) == 1
    m = pow(1 << 1000, d, N)

    with open('users.txt', 'rb') as f:
        users = sorted(x for x in f.read().split(b'\n') if x != b'')

    h = 5381
    for s in users:
        for c in s:
            h = (h * 33 + c) % (1 << 64)

    x = (m + h) % (1 << 64)
    for _ in range(20):
        x = (x * 6364136223846793005 + 1) % (1 << 64)
        y = (x >> 32) % len(users)
        print(users[y].decode())
        del users[y]


main()
