Problem: Mr. Santa asks all the great programmers of the world to solve a trivial problem. He gives them an integer m and asks for the number of positive integers n, such that the factorial of n ends with exactly m zeroes. Are you among those great programmers who can solve this problem?

Input

The only line of input contains an integer m (1 ≤ m ≤ 100 000) — the required number of trailing zeroes in factorial.

Output

First print k — the number of values of n such that the factorial of n ends with m zeroes. Then print these k integers in increasing order.

Examples

Input

1


Output

5
5 6 7 8 9 

Input

5


Output

0

Note

The factorial of n is equal to the product of all integers from 1 to n inclusive, that is n! = 1·2·3·...·n.

In the first sample, 5! = 120, 6! = 720, 7! = 5040, 8! = 40320 and 9! = 362880.

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.ArrayDeque;
import java.util.Locale;
import java.util.StringTokenizer;

public class B implements Runnable {

    private static final boolean ONLINE_JUDGE = System.getProperty("ONLINE_JUDGE") != null;

    private BufferedReader in;
    private PrintWriter out;
    private StringTokenizer tok = new StringTokenizer("");

    private void init() throws FileNotFoundException {
        Locale.setDefault(Locale.US);
        String fileName = "";
        if (ONLINE_JUDGE && fileName.isEmpty()) {
            in = new BufferedReader(new InputStreamReader(System.in));
            out = new PrintWriter(System.out);
        } else {
            if (fileName.isEmpty()) {
                in = new BufferedReader(new FileReader("input.txt"));
                out = new PrintWriter("output.txt");
            } else {
                in = new BufferedReader(new FileReader(fileName + ".in"));
                out = new PrintWriter(fileName + ".out");
            }
        }
    }

    String readString() {
        while (!tok.hasMoreTokens()) {
            try {
                tok = new StringTokenizer(in.readLine());
            } catch (Exception e) {
                return null;
            }
        }
        return tok.nextToken();
    }

    int readInt() {
        return Integer.parseInt(readString());
    }

    long readLong() {
        return Long.parseLong(readString());
    }

    double readDouble() {
        return Double.parseDouble(readString());
    }

    int[] readIntArray(int size) {
        int[] a = new int[size];
        for (int i = 0; i < size; i++) {
            a[i] = readInt();
        }
        return a;
    }

    public static void main(String[] args) {
        //new Thread(null, new _Solution(), "", 128 * (1L << 20)).start();
        new B().run();
    }

    long timeBegin, timeEnd;

    void time() {
        timeEnd = System.currentTimeMillis();
        System.err.println("Time = " + (timeEnd - timeBegin));
    }

    @Override
    public void run() {
        try {
            timeBegin = System.currentTimeMillis();
            init();
            solve();
            out.close();
            time();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(-1);
        }
    }

    int MAX_POW = 16;
    long[] pow = new long[MAX_POW];

    int getCountOfZeroes(int x) {
        int count = 0;
        for (int i = 1; i < MAX_POW; i++) {
            count = (int) (count + x / pow[i]);
        }
        return count;
    }

    private void solve() {
        int m = readInt();

        pow[0] = 1;
        for (int i = 1; i < MAX_POW; i++) {
            pow[i] = pow[i - 1] * 5;
        }

        getCountOfZeroes(30);

        int left = 1, right = 1000 * 1000 * 1000;
        int leftBorder = -1;
        while (left <= right) {
            int mid = (left + right) >> 1;
            int countOfZeroes = getCountOfZeroes(mid);
            if (countOfZeroes == m) {
                leftBorder = mid;
                right = mid - 1;
            } else {
                if (countOfZeroes > m) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            }
        }

        left = 1;
        right = 1000 * 1000 * 1000;
        int rightBorder = -1;
        while (left <= right) {
            int mid = (left + right) >> 1;
            int countOfZeroes = getCountOfZeroes(mid);
            if (countOfZeroes == m) {
                rightBorder = mid;
                left = mid + 1;
            } else {
                if (countOfZeroes > m) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            }
        }

        if (leftBorder == -1 || rightBorder == -1) {
            out.println(0);
            return;
        }

        out.println(rightBorder - leftBorder + 1);
        for (int i = leftBorder; i <= rightBorder; i++) {
            out.print(i + " ");
        }
    }
}