N = 21810337261290937708019182958043273434615424352138795179298028706474564701118117048351570509266587012355110017560140686406349691104886200068336403981439328133656015362895653738086887200752388615150856559794079457319376019685835950357390381424161168956426602887866439066628313648991784192916005657483974643715450567996650638449796204516220528217634511312438038064931414714872304951377599311461477104473757400766621650473454011171292200495346354792516649216900698947550816336977543600984677784673440652269258256821806343286448740895868506533806210365975678123294949583137771567466194057607771825476094507317228016078471


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()
