import java.lang.reflect.Method;

/** 30 pattern programs. Run: java PatternPrograms        (all)   or   java PatternPrograms 07 5  (one pattern, size n) */
public class PatternPrograms {

    // BEGIN p01
    static void p01(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) System.out.print("* ");
            System.out.println();
        }
    }
    // END p01

    // BEGIN p02
    static void p02(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n - i + 1; j++) System.out.print("* ");
            System.out.println();
        }
    }
    // END p02

    // BEGIN p03
    static void p03(int n) {
        for (int i = 1; i <= n; i++) {
            for (int s = 1; s <= n - i; s++) System.out.print("  ");
            for (int j = 1; j <= i; j++) System.out.print("* ");
            System.out.println();
        }
    }
    // END p03

    // BEGIN p04
    static void p04(int n) {
        for (int i = 1; i <= n; i++) {
            for (int s = 1; s <= n - i; s++) System.out.print(" ");
            for (int j = 1; j <= i; j++) System.out.print("* ");
            System.out.println();
        }
    }
    // END p04

    // BEGIN p05
    static void p05(int n) {
        for (int i = 1; i <= n; i++) {
            for (int s = 1; s <= i - 1; s++) System.out.print(" ");
            for (int j = 1; j <= n - i + 1; j++) System.out.print("* ");
            System.out.println();
        }
    }
    // END p05

    // BEGIN p06
    static void p06(int n) {
        for (int i = 1; i <= 2 * n - 1; i++) {
            int k = i <= n ? i : 2 * n - i;          // stars on this row
            for (int s = 1; s <= n - k; s++) System.out.print(" ");
            for (int j = 1; j <= k; j++) System.out.print("* ");
            System.out.println();
        }
    }
    // END p06

    // BEGIN p07
    static void p07(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                boolean border = i == 1 || i == n || j == 1 || j == n;
                System.out.print(border ? "* " : "  ");
            }
            System.out.println();
        }
    }
    // END p07

    // BEGIN p08
    static void p08(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                boolean edge = j == 1 || j == i || i == n;
                System.out.print(edge ? "* " : "  ");
            }
            System.out.println();
        }
    }
    // END p08

    // BEGIN p09
    static void p09(int n) {
        for (int i = 1; i <= n; i++) {
            for (int s = 1; s <= n - i; s++) System.out.print(" ");
            for (int j = 1; j <= 2 * i - 1; j++) {
                boolean edge = j == 1 || j == 2 * i - 1 || i == n;
                System.out.print(edge ? "*" : " ");
            }
            System.out.println();
        }
    }
    // END p09

    // BEGIN p10
    static void p10(int n) {
        for (int i = 1; i <= 2 * n - 1; i++) {
            int k = i <= n ? i : 2 * n - i;
            for (int s = 1; s <= n - k; s++) System.out.print(" ");
            for (int j = 1; j <= 2 * k - 1; j++)
                System.out.print(j == 1 || j == 2 * k - 1 ? "*" : " ");
            System.out.println();
        }
    }
    // END p10

    // BEGIN p11
    static void p11(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) System.out.print("* ");
            System.out.println();
        }
    }
    // END p11

    // BEGIN p12
    static void p12(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) System.out.print(j + " ");
            System.out.println();
        }
    }
    // END p12

    // BEGIN p13
    static void p13(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) System.out.print(i + " ");
            System.out.println();
        }
    }
    // END p13

    // BEGIN p14
    static void p14(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n - i + 1; j++) System.out.print(j + " ");
            System.out.println();
        }
    }
    // END p14

    // BEGIN p15
    static void p15(int n) {
        for (int i = 1; i <= n; i++) {
            for (int s = 1; s <= n - i; s++) System.out.print(" ");
            for (int j = 1; j <= i; j++) System.out.print(j);
            for (int j = i - 1; j >= 1; j--) System.out.print(j);
            System.out.println();
        }
    }
    // END p15

    // BEGIN p16
    static void p16(int n) {
        int next = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) System.out.print(next++ + " ");
            System.out.println();
        }
    }
    // END p16

    // BEGIN p17
    static void p17(int n) {
        for (int r = 0; r < n; r++) {
            for (int s = 0; s < n - 1 - r; s++) System.out.print("  ");
            int c = 1;                                   // C(r, 0)
            for (int k = 0; k <= r; k++) {
                System.out.printf("%4d", c);
                c = c * (r - k) / (k + 1);               // C(r, k+1) from C(r, k)
            }
            System.out.println();
        }
    }
    // END p17

    // BEGIN p18
    static void p18(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) System.out.print((char) ('A' + j - 1) + " ");
            System.out.println();
        }
    }
    // END p18

    // BEGIN p19
    static void p19(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) System.out.print((char) ('A' + i - 1) + " ");
            System.out.println();
        }
    }
    // END p19

    // BEGIN p20
    static void p20(int n) {
        for (int i = 1; i <= n; i++) {
            for (int s = 1; s <= n - i; s++) System.out.print(" ");
            for (int j = 1; j <= i; j++) System.out.print((char) ('A' + j - 1));
            for (int j = i - 1; j >= 1; j--) System.out.print((char) ('A' + j - 1));
            System.out.println();
        }
    }
    // END p20

    // BEGIN p21
    static void p21(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) System.out.print((i + j + 1) % 2 + " ");
            System.out.println();
        }
    }
    // END p21

    // BEGIN p22
    static void p22(int n) {
        for (int i = 1; i <= 2 * n; i++) {
            int k = i <= n ? i : 2 * n + 1 - i;          // stars on each side
            for (int j = 1; j <= k; j++) System.out.print("*");
            for (int s = 1; s <= 2 * (n - k); s++) System.out.print(" ");
            for (int j = 1; j <= k; j++) System.out.print("*");
            System.out.println();
        }
    }
    // END p22

    // BEGIN p23
    static void p23(int n) {
        for (int i = 1; i <= 2 * n - 1; i++) {
            int m = i <= n ? n - i + 1 : i - n + 1;      // n, n-1, ... 1, ... n
            for (int s = 1; s <= n - m; s++) System.out.print(" ");
            for (int j = 1; j <= 2 * m - 1; j++) System.out.print("*");
            System.out.println();
        }
    }
    // END p23

    // BEGIN p24
    static void p24(int n) {
        for (int i = 1; i <= 2 * n - 1; i++) {
            int k = i <= n ? i : 2 * n - i;
            for (int j = 1; j <= k; j++) System.out.print("* ");
            System.out.println();
        }
    }
    // END p24

    // BEGIN p25
    static void p25(int n) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++)
                System.out.print(j == i || j == n - 1 - i ? "*" : " ");
            System.out.println();
        }
    }
    // END p25

    // BEGIN p26
    static void p26(int n) {
        for (int i = 1; i <= n; i++) {
            for (int s = 1; s <= n - i; s++) System.out.print(" ");
            for (int j = i; j >= 1; j--) System.out.print(j);
            for (int j = 2; j <= i; j++) System.out.print(j);
            System.out.println();
        }
    }
    // END p26

    // BEGIN p27
    static void p27(int n) {
        int[][] a = new int[n][n];
        int top = 0, bottom = n - 1, left = 0, right = n - 1, v = 1;
        while (top <= bottom && left <= right) {
            for (int j = left; j <= right; j++) a[top][j] = v++;        // → along the top
            top++;
            for (int i = top; i <= bottom; i++) a[i][right] = v++;      // ↓ down the right
            right--;
            if (top <= bottom) {
                for (int j = right; j >= left; j--) a[bottom][j] = v++; // ← along the bottom
                bottom--;
            }
            if (left <= right) {
                for (int i = bottom; i >= top; i--) a[i][left] = v++;   // ↑ up the left
                left++;
            }
        }
        for (int[] row : a) {
            for (int x : row) System.out.printf("%3d", x);
            System.out.println();
        }
    }
    // END p27

    // BEGIN p28
    static void p28(int n) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) System.out.print((i + j) % 2 == 0 ? "# " : ". ");
            System.out.println();
        }
    }
    // END p28

    // BEGIN p29
    static void p29(int n) {
        int mid = n / 2;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) System.out.print(i == mid || j == mid ? "*" : " ");
            System.out.println();
        }
    }
    // END p29

    // BEGIN p30
    static void p30(int n) {
        for (int i = 1; i <= 2 * n - 1; i++) {
            int k = i <= n ? i : 2 * n - i;
            for (int s = 1; s <= n - k; s++) System.out.print(" ");
            for (int j = 1; j <= k; j++) System.out.print(j);
            for (int j = k - 1; j >= 1; j--) System.out.print(j);
            System.out.println();
        }
    }
    // END p30

    public static void main(String[] args) throws Exception {
        if (args.length >= 2) {
            Method m = PatternPrograms.class.getDeclaredMethod("p" + args[0], int.class);
            m.invoke(null, Integer.parseInt(args[1]));
            return;
        }
        for (int p = 1; p <= 30; p++) {
            String id = String.format("%02d", p);
            int n = p == 17 ? 6 : p == 22 ? 4 : p == 25 ? 7 : 5;
            System.out.println("--- pattern " + id + " ---");
            PatternPrograms.class.getDeclaredMethod("p" + id, int.class).invoke(null, n);
        }
    }
}
