Problem: We all know the problem about the number of ways one can tile a 2 × n field by 1 × 2 dominoes. You probably remember that it goes down to Fibonacci numbers. We will talk about some other problem below, there you also are going to deal with tiling a rectangular field with dominoes.

You are given a 4 × n rectangular field, that is the field that contains four lines and n columns. You have to find for it any tiling by 1 × 2 dominoes such that each of the n - 1 potential vertical cuts along the grid lines intersects at least one domino, splitting it in two. No two dominoes in the sought tiling should overlap, each square of the field should be covered by exactly one domino. It is allowed to rotate the dominoes, that is, you can use 2 × 1 as well as 1 × 2 dominoes.

Write a program that finds an arbitrary sought tiling. 

Input

The input contains one positive integer n (1 ≤ n ≤ 100) — the number of the field's columns.

Output

If there's no solution, print "-1" (without the quotes). Otherwise, print four lines containing n characters each — that's the description of tiling, where each vertical cut intersects at least one domino. You should print the tiling, having painted the field in no more than 26 colors. Each domino should be painted a color. Different dominoes can be painted the same color, but dominoes of the same color should not be side-neighbouring. To indicate colors you should use lowercase Latin letters. Print any of the acceptable ways of tiling.

Examples

Input

4


Output

yyzz
bccd
bxxd
yyaa

Solution (in JAVA):

Solution:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Trung Pham
 */
public class A {

    public static int[] x = {0, 0, 0, 1, -1, 1, -1, 1, -1};
    public static int[] y = {0, 1, -1, 0, 0, 1, 1, -1, -1};

    public static void main(String[] args) {
        try {
            Scanner in = new Scanner();
            // PrintWriter out = new PrintWriter(new FileOutputStream(new File("output.txt")));
            PrintWriter out = new PrintWriter(System.out);
            int n = in.nextInt();
            //  System.out.println(isLucky(47));
            if (n > 2) {
                if (n % 2 == 0) {
                    boolean ok = true;
                    for (int i = 0; i < n; i += 2) {
                        if (ok) {
                            out.print("aa");
                        } else {
                            out.print("bb");
                        }
                        ok = !ok;
                    }
                    out.println();
                    out.print('c');
                    ok = true;
                    for (int i = 1; i < n - 1; i += 2) {
                        if (ok) {
                            out.print("dd");
                        } else {
                            out.print("ee");
                        }
                        ok = !ok;
                    }
                    out.println('c');
                    out.print('c');
                    ok = true;
                    for (int i = 1; i < n - 1; i += 2) {
                        if (ok) {
                            out.print("ee");
                        } else {
                            out.print("dd");
                        }
                        ok = !ok;
                    }
                    out.println('c');
                    ok = true;
                    for (int i = 0; i < n; i += 2) {
                        if (ok) {
                            out.print("aa");
                        } else {
                            out.print("bb");
                        }
                        ok = !ok;
                    }
                    out.println();
                } else {
                    boolean ok = true;
                    for (int i = 0; i < n - 1; i += 2) {
                        if (ok) {
                            out.print("aa");
                        } else {
                            out.print("bb");
                        }
                        ok = !ok;
                    }
                    out.println('e');
                    ok = true;
                    for (int i = 0; i < n - 1; i += 2) {
                        if (ok) {
                            out.print("cc");
                        } else {
                            out.print("dd");
                        }
                        ok = !ok;
                    }
                    out.println('e');
                    out.print('e');
                    for (int i = 1; i < n; i += 2) {
                        if (ok) {
                            out.print("aa");
                        } else {
                            out.print("bb");
                        }
                        ok = !ok;
                    }
                    out.println();
                    out.print('e');
                    for (int i = 1; i < n; i += 2) {
                        if (ok) {
                            out.print("cc");
                        } else {
                            out.print("dd");
                        }
                        ok = !ok;
                    }
                    out.println();
                }
            } else if(n == 2){
                out.println("aa");
                out.println("bb");
                out.println("aa");
                out.println("bb");
            }else{
                out.println("a");
                out.println("a");
                out.println("b");
                out.println("b");
            }
            out.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    static boolean isLucky(int val) {
        if (val == 0) {
            return false;

        }
        while (val > 0) {
            int temp = val % 10;
            if (temp != 4 && temp != 7) {
                return false;
            }
            val /= 10;
        }
        return true;
    }

    static double dist(Point a, Point b) {
        long total = (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
        return Math.sqrt(total);
    }

    static class Point {

        int x, y;

        public Point(int x, int y) {
            this.x = x;
            this.y = y;

        }
    }

    public static boolean nextPer(int[] data) {
        int i = data.length - 1;
        while (i > 0 && data[i] < data[i - 1]) {
            i--;
        }
        if (i == 0) {
            return false;
        }
        int j = data.length - 1;
        while (data[j] < data[i - 1]) {
            j--;
        }
        int temp = data[i - 1];
        data[i - 1] = data[j];
        data[j] = temp;
        Arrays.sort(data, i, data.length);
        return true;
    }

    static class FT {

        int[] data;

        FT(int n) {
            data = new int[n];
        }

        void update(int index, int val) {
            // System.out.println("UPDATE INDEX " + index);
            while (index < data.length) {
                data[index] += val;
                index += index & (-index);

                //    System.out.println("NEXT " +index);
            }
        }

        int get(int index) {
            //  System.out.println("GET INDEX " + index);
            int result = 0;
            while (index > 0) {
                result += data[index];
                index -= index & (-index);
                // System.out.println("BACK " + index);
            }
            return result;
        }
    }

    static int gcd(int a, int b) {
        if (b == 0) {
            return a;
        } else {
            return gcd(b, a % b);
        }
    }

    static int pow(int a, int b) {
        if (b == 0) {
            return 1;
        }
        if (b == 1) {
            return a;
        }
        int val = pow(a, b / 2);
        if (b % 2 == 0) {

            return val * val;
        } else {
            return val * val * a;
        }
    }

//    static Point intersect(Point a, Point b, Point c) {
//        double D = cross(a, b);
//        if (D != 0) {
//            return new Point(cross(c, b) / D, cross(a, c) / D);
//        }
//        return null;
//    }
//
//    static Point convert(Point a, double angle) {
//        double x = a.x * cos(angle) - a.y * sin(angle);
//        double y = a.x * sin(angle) + a.y * cos(angle);
//        return new Point(x, y);
//    }
//    static Point minus(Point a, Point b) {
//        return new Point(a.x - b.x, a.y - b.y);
//    }
//
//    static Point add(Point a, Point b) {
//        return new Point(a.x + b.x, a.y + b.y);
//    }
//
//    static double cross(Point a, Point b) {
//        return a.x * b.y - a.y * b.x;
//
//
//    }
//
//    static class Point {
//
//        int x, y;
//
//        Point(int x, int y) {
//            this.x = x;
//            this.y = y;
//        }
//
//        @Override
//        public String toString() {
//            return "Point: " + x + " " + y;
//        }
//    }
    static class Scanner {

        BufferedReader br;
        StringTokenizer st;

        public Scanner() throws FileNotFoundException {
            //System.setOut(new PrintStream(new BufferedOutputStream(System.out), true));
            br = new BufferedReader(new InputStreamReader(System.in));
            // br = new BufferedReader(new FileReader(new File("input.txt")));
        }

        public String next() {


            while (st == null || !st.hasMoreTokens()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (Exception e) {
                    throw new RuntimeException();
                }
            }
            return st.nextToken();
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }

        public String nextLine() {
            st = null;
            try {
                return br.readLine();
            } catch (Exception e) {
                throw new RuntimeException();
            }
        }

        public boolean endLine() {
            try {
                String next = br.readLine();
                while (next != null && next.trim().isEmpty()) {
                    next = br.readLine();
                }
                if (next == null) {
                    return true;
                }
                st = new StringTokenizer(next);
                return st.hasMoreTokens();
            } catch (Exception e) {
                throw new RuntimeException();
            }
        }
    }
}