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
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.MathContext;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Collections;
import java.util.Comparator;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.TreeSet;
 
import static java.lang.Double.*;
import static java.math.BigInteger.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
import static java.util.Collections.*;
 
public class Main implements Runnable {
	
//	private long start;
	
	private void solve() throws IOException {
//		start = System.currentTimeMillis();
		init();
		readData();
		processing();
	}

	private int[][] answer;
	int color = 0;
	
	private void processing() {
		answer = new int[4][n];
		if (n == 1) {
			coloring(0, 0, 1, 0, color++);
			coloring(2, 0, 3, 0, color++);
			printIt();
			return;
		}		
		if (n%2 == 0)
		{
			case0();
		}
		else if (n%2 == 1) {
			case1();
		}
		printIt();
	}
	
	private void printIt() {
		for (int i = 0; i < 4; ++i) {
			for (int j = 0; j < n; ++j) {
				print((char)('a' + (answer[i][j]%26)));
			}
			println();
		}
	}
	
	private void case0() {
		coloring(0, 0, 0, 1, color++);
		coloring(1, 0, 2, 0, color++);
		coloring(3, 0, 3, 1, color++);
		for (int i = 2; i < n; i += 2) {
			coloring(0, i, 0, i+1, color++);
			coloring(1, i-1, 1, i, color++);
			coloring(2, i-1, 2, i, color++);
			coloring(3, i, 3, i+1, color++);
		}
		coloring(1, n-1, 2, n-1, color++);
	}
	
	private void coloring(int x1, int y1, int x2, int y2, int color) {
		answer[x1][y1] = color;
		answer[x2][y2] = color;
	}
	
	private void case1() {
		coloring(0, 0, 0, 1, color++);
		coloring(1, 0, 1, 1, color++);
		coloring(2, 0, 3, 0, color++);
		for (int i = 2; i + 2 < n; i += 2) {
			coloring(0, i, 0, i+1, color++);
			coloring(1, i, 1, i+1, color++);
			coloring(2, i-1, 2, i, color++);
			coloring(3, i-1, 3, i, color++);
		}
		coloring(2, n-2, 2, n-1, color++);
		coloring(3, n-2, 3, n-1, color++);
		coloring(0, n-1, 1, n-1, color++);
	}
	
	private void case2() {
		
	}
	
	private void case3() {
		
	}
	
	private void init() {
	}
	
	private void readData() throws IOException {
		n = nextInt();
	}
	
	private int n;
	private int m;
	private int k;
	private int l;
	private String s;
	private int[] a;
	
	private static final int INF = 1000000000;
	private static final double EPS = 1e-9;
	
	public static void main(String[] args) throws InterruptedException {
		new Thread(null, new Runnable() {
			public void run() {
				new Main().run();
			}
		}, "1", 1 << 24).start();
	}	
	
	// @Override
	public void run() {
		try {
			boolean onlineJudge = System.getProperty("ONLINE_JUDGE") != null;
			reader = onlineJudge ? new BufferedReader(new InputStreamReader(
					System.in)) : new BufferedReader(
					new FileReader(
							"input.txt"
					));
			writer = onlineJudge ? new PrintWriter(new BufferedWriter(
					new OutputStreamWriter(System.out))) : new PrintWriter(
					new BufferedWriter(new FileWriter("output.txt")));
			Locale.setDefault(Locale.US);
			tokenizer = null;
			solve();
			writer.flush();
		} catch (Exception error) {
			error.printStackTrace();
			System.exit(1);
		}
	}
	
	class InputReader {
	       
        public InputReader(InputStream stream) {
            this.stream = stream;
        }
 
        public int read() {
            if (numChars == -1)
                    throw new InputMismatchException();
            if (curChar >= numChars) {
                    curChar = 0;
                    try {
                            numChars = stream.read(buf);
                    } catch (IOException e) {
                            throw new InputMismatchException();
                    }
                    if (numChars <= 0)
                            return -1;
            }
            return buf[curChar++];
        }
 
        public int readInt() {
            int c = read();
            while (isSpaceChar(c))
                    c = read();
            int sgn = 1;
            if (c == '-') {
                    sgn = -1;
                    c = read();
            }
            int res = 0;
            do {
                    if (c < '0' || c > '9')
                            throw new InputMismatchException();
                    res *= 10;
                    res += c - '0';
                    c = read();
            } while (!isSpaceChar(c));
            return res * sgn;
        }
 
        public long readLong() {
            int c = read();
            while (isSpaceChar(c))
                    c = read();
            int sgn = 1;
            if (c == '-') {
                    sgn = -1;
                    c = read();
            }
            long res = 0;
            do {
                    if (c < '0' || c > '9')
                            throw new InputMismatchException();
                    res *= 10;
                    res += c - '0';
                    c = read();
            } while (!isSpaceChar(c));
            return res * sgn;
        }
 
        public String readString() {
            int c = read();
            while (isSpaceChar(c))
                    c = read();
            StringBuffer res = new StringBuffer();
            do {
                    res.appendCodePoint(c);
                    c = read();
            } while (!isSpaceChar(c));
            return res.toString();
        }
 
        private boolean isSpaceChar(int c) {
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }
 
        private String readLine0() {
            StringBuffer buf = new StringBuffer();
            int c = read();
            while (c != '\n' && c != -1) {
                    if (c != '\r')
                            buf.appendCodePoint(c);
                    c = read();
            }
            return buf.toString();
        }
 
        public String readLine() {
            String s = readLine0();
            while (s.trim().length() == 0)
                    s = readLine0();
            return s;
        }
 
        public String readLine(boolean ignoreEmptyLines) {
            if (ignoreEmptyLines)
                    return readLine();
            else
                    return readLine0();
        }
 
        public char readCharacter() {
            int c = read();
            while (isSpaceChar(c))
                    c = read();
            return (char) c;
        }
 
        public double readDouble() {
            int c = read();
            while (isSpaceChar(c))
                    c = read();
            int sgn = 1;
            if (c == '-') {
                    sgn = -1;
                    c = read();
            }
            double res = 0;
            while (!isSpaceChar(c) && c != '.') {
                    if (c == 'e' || c == 'E')
                            return res * Math.pow(10, readInt());
                    if (c < '0' || c > '9')
                            throw new InputMismatchException();
                    res *= 10;
                    res += c - '0';
                    c = read();
            }
            if (c == '.') {
                    c = read();
                    double m = 1;
                    while (!isSpaceChar(c)) {
                            if (c == 'e' || c == 'E')
                                    return res * Math.pow(10, readInt());
                            if (c < '0' || c > '9')
                                    throw new InputMismatchException();
                            m /= 10;
                            res += (c - '0') * m;
                            c = read();
                    }
            }
            return res * sgn;
        }
        
        private InputStream stream;
        private byte[] buf = new byte[1<<16];
        private int curChar;
        private int numChars;
	}
	
	private class Parser {
 
        public Parser(InputStream in) {
           din = new DataInputStream(in);
           buffer = new byte[BUFFER_SIZE];
           bufferPointer = bytesRead = 0;
        }
 
        public byte c;
        
        public int nextInt() throws IOException {
           int value = 0;
           c = read();
           while (c <= ' ') c = read();
           boolean neg = c == '-';
           if (neg) c = read();
           do {
              value = value*10 + c-48;
              c = read();
           } 
           while (c > ' ');
           if (neg) {
               return -value;
           }
           else {
               return value;
           }
        }
 
        private void fillBuffer() throws IOException {
           bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
           if (bytesRead == -1) buffer[0] = -1;
        }
 
        public byte read() throws IOException {
           if (bufferPointer == bytesRead) fillBuffer();
           return buffer[bufferPointer++];
        }
 
        private DataInputStream din;
        private byte[] buffer;
        private int bufferPointer, bytesRead;
        
        final private int BUFFER_SIZE = 1 << 16;
    }
 
	private BufferedReader reader;
	private PrintWriter writer;
	private StringTokenizer tokenizer;
 
	private void println() {
		writer.println();
	}
	
	private void print(Object obj) {
		writer.print(obj);
	}
	
	private void println(Object obj) {
		writer.println(obj);
	}
	
	private void printf(String f, Object... obj) {
		writer.printf(f, obj);
	}
 
	private int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}
 
	private long nextLong() throws IOException {
		return Long.parseLong(nextToken());
	}
 
	private double nextDouble() throws IOException {
		return Double.parseDouble(nextToken());
	}
 
	private String nextToken() throws IOException {
		while (tokenizer == null || !tokenizer.hasMoreTokens()) {
			tokenizer = new StringTokenizer(reader.readLine());
		}
		return tokenizer.nextToken();
	}
}    