#include <bits/stdc++.h>

int ri() {
	int n;
	scanf("%d", &n);
	return n;
}

int main() {
	int n = ri();
	std::vector<std::string> res(n, std::string(n, '.'));
	std::string r4[] = {
		"aacd",
		"bbcd",
		"cdaa",
		"cdbb"
	};
	std::string r5[] = {
		"aabba",
		"bcc.a",
		"b..cb",
		"a..cb",
		"abbaa"
	};
	std::string r6[] = {
		"ab..aa",
		"ab..bb",
		"ccab..",
		"..abcc",
		"abcc..",
		"abdd.."
	};
	std::string r7[] = {
		"aab.aa.",
		"b.b...a",
		"baa...a",
		"...baab",
		"...b.cb",
		"...aaca",
		"aabb..a"
	};
	std::string r3[] = {
		"aa.",
		"..b",
		"..b"
	};
	if (n == 2) {
		std::cout << -1 << std::endl;
		return 0;
	} else if (n % 3 == 0) {
		for (int i = 0; i < n; i += 3)
			for (int j = 0; j < 3; j++) std::copy(r3[j].begin(), r3[j].end(), res[i + j].begin() + i);
	} else if (n % 4 == 0) {
		for (int i = 0; i < n; i += 4)
			for (int j = 0; j < 4; j++) std::copy(r4[j].begin(), r4[j].end(), res[i + j].begin() + i);
	} else {
		auto draw = [&] (std::string *s) {
			int n = s[0].size();
			for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) res[i][j] = s[i][j];
		};
		int i = 0;
		if (n % 4 == 1) draw(r5), i = 5;
		else if (n % 4 == 2) draw(r6), i = 6;
		else if (n % 4 == 3) draw(r7), i = 7;
		for (; i < n; i += 4) {
			for (int j = 0; j < 4; j++) std::copy(r4[j].begin(), r4[j].end(), res[i + j].begin() + i);
		}
	}
	for (auto i : res) std::cout << i << std::endl;
	return 0;
}


