import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Optional;
public class Aliens {
private static BigInteger getInput() {
try (BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) )) {
return new BigInteger(reader.readLine());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
var input = getInput();
var alien = new Aliens(input);
var result = alien.find();
System.out.println(result.result);
System.out.println(result.proof.a + " " + result.proof.b);
}
public static class SecondLine {
BigInteger a;
BigInteger b;
SecondLine(BigInteger a, BigInteger b) {
this.a = a;
this.b = b;
}
}
public static class AlienResult {
BigInteger result;
SecondLine proof;
AlienResult(BigInteger result, SecondLine proof) {
this.result = result;
this.proof = proof;
}
}
private BigInteger input;
public Aliens(BigInteger input) {
this.input = input;
}
private Optional<SecondLine> findDivision(BigInteger num) {
var half = num.divide(BigInteger.TWO);
for (BigInteger i = BigInteger.TWO; i.compareTo(half) == -1; i = i.add(BigInteger.ONE)) {
if (num.mod(i).equals(BigInteger.ZERO)) {
return Optional.of(new SecondLine(i, num.divide(i)));
}
}
return Optional.empty();
}
public AlienResult find() {
var result = findDivision(this.input);
if (result.isPresent()) {
return new AlienResult(this.input, result.get());
}
for (int i = 1; i < 99999; i++) {
var newInput = new BigInteger(i + this.input.toString());
result = findDivision(newInput);
if (result.isPresent()) {
return new AlienResult(newInput, result.get());
}
}
return null;
}
}