import java.util.*;
import java.io.*;

// Задача "Забавная последовательность"
// 10-ая Интернет-олимпиада сезона 2006-2007, базовый уровень
// Автор условия: Федор Царев, tsarev@rain.ifmo.ru
// Автор решения: Максим Буздалов, buzdalov@rain.ifmo.ru

// Использует перебор (O(N^2)), не должно укладываться во время.
// Генерирует исходный код решения.

public class sequence_mb_gen {
    public static void main(String[] args) throws IOException {
        PrintWriter out = new PrintWriter("sequence_mb_precalc.java");

        int n = 100000;

        assert 1 <= n && n <= 100000;

        int[] values = new int[n + 1];
        values[1] = 1;

        for (int i = 2; i <= n; i++) {
            boolean used = false;
            for (int j = 1; j < i; j++) {
                if (values[j] == i) {
                    used = true;
                    break;
                }
            }

            if (used) {
                values[i] = values[i - 1] + 3;                
            } else {
                values[i] = values[i - 1] + 2;
            }
        }

        out.println("import java.io.*;");
        out.println("import java.util.*;");

        out.println("");
        out.println("// Задача \"Забавная последовательность\"");
        out.println("// 10-ая Интернет-олимпиада сезона 2006-2007, базовый уровень");
        out.println("// Автор условия: Федор Царев, tsarev@rain.ifmo.ru");
        out.println("// Автор решения: Максим Буздалов, buzdalov@rain.ifmo.ru");
        out.println("");
        out.println("// Автоматически сгенерированное решение.");
        out.println("");
        out.println("public class sequence_mb_precalc {");
        out.println("    static Holder[] results = new Holder[] {");
        for (int i = 0; i < 100; i++) {
            out.println("        new Holder" + i + "(),");
        }
        out.println("    };");
        out.println("");
        out.println("    public static void main(String[] args) throws IOException {");
        out.println("        Scanner in = new Scanner(new File(\"sequence.in\"));");
        out.println("        PrintWriter out = new PrintWriter(\"sequence.out\");");
        out.println("        int n = in.nextInt() - 1;");
        out.println("        out.println(results[n / 1000].get(n % 1000));");
        out.println("        out.close();");
        out.println("        in.close();");
        out.println("    }");
        out.println("}");

        out.println("");
        out.println("interface Holder {public int get(int arg);}");

        for (int i = 0; i < 100; i++) {
            out.println("");
            out.println("class Holder" + i + " implements Holder {");
            out.println("    int[] res = new int[] {");
            for (int j = 0; j < 1000; j++) {
                out.println(values[1000 * i + j + 1] + ",");
            }
            out.println("    };");
            out.println("    public int get(int arg) {return res[arg];}");
            out.println("}");
        }

        out.close();
    }
}