#! /usr/bin/env python

# Factorize numbers.
# The algorithm is not efficient, but easy to understand.
# If there are large factors, it will take forever to find them,
# because we try all odd numbers between 3 and sqrt(n)...

import sys
from math import sqrt

def fact(n):
    if n < 1:
        raise ValueError('fact() argument should be >= 1')
    if n == 1:
        return []  # special case
    res = []
    # Treat even factors special, so we can use i += 2 later
    while n % 2 == 0:
        res.append(2)
        n //= 2
    # Try odd numbers up to sqrt(n)
    limit = sqrt(n+1)
    i = 3
    while i <= limit:
        if n % i == 0:
            res.append(i)
            n //= i
            limit = sqrt(n+1)
        else:
            i += 2
    if n != 1:
        res.append(n)
    return res

def main():
    if len(sys.argv) > 1:
        source = sys.argv[1:]
    else:
        source = iter(input, '')
    for arg in source:
        try:
            n = int(arg)
        except ValueError:
            print(arg, 'is not an integer')
        else:
            print(n, fact(n))

if __name__ == "__main__":
    main()
