#include <bits/stdc++.h>
using namespace std;
int N, K;
vector<vector<int>> A;
bool f(int i, int j, int k) {
	if (i == N) {
		for (int j = 0; j < N; ++ j) {
			set<int> s;
			for (int i = 0; i < N; ++ i) if (A[i][j]) s.insert(A[i][j]);
			if (s.size() != K) return false;
		}
		return true;
	} else if (j == N) {
		set<int> s;
		for (int j = 0; j < N; ++ j) if (A[i][j]) s.insert(A[i][j]);
		if (s.size() != K) return false;
		return f(i+1, 0, k);
	} else {
		if (A[i][j] != 0) return f(i, j+1, k);
		if (f(i, j+1, k)) return true;
		if (j < N-1 && A[i][j+1] == 0) {
			A[i][j] = A[i][j+1] = k;
			if (f(i, j+2, k+1)) return true;
			A[i][j] = A[i][j+1] = 0;
		}
		if (i < N-1 && A[i+1][j] == 0) {
			A[i][j] = A[i+1][j] = k;
			if (f(i, j+1, k+1)) return true;
			A[i][j] = A[i+1][j] = 0;
		}
		return false;
	}
}
int main() {
	int n;
	cin >> n;
	if (n == 2) {
		cout << -1 << endl;
		return 0;
	}
	if (n == 3) {
		cout << "aab" << endl;
		cout << "d.b" << endl;
		cout << "dcc" << endl;
		return 0;
	}
	K = 3;
	vector<vector<vector<int>>> hoge;
	for (N = 4; N <= 7; ++ N) {
		A = vector<vector<int>>(N, vector<int>(N));
		if (!f(0, 0, 1)) throw 1;
		hoge.push_back(A);
	}
	vector<string> res(n, string(n, '.'));
	for (int p = 0; p < n; ) {
		int m = n-p <= 7 ? n-p : 4;
		for (int i = 0; i < m; ++ i) for (int j = 0; j < m; ++ j) {
			int x = hoge[m - 4][i][j];
			if (x) res[p+i][p+j] = 'a' + x;
		}
		p += m;
	}
	for (auto& x : res) cout << x << endl;
}
