#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <map>
#include <list>
#include <set>
#include <numeric>
#include <queue>
#include <stack>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <climits>
#include <cfloat>
#include <ctime>
#include <complex>
#include <cassert>
#include <array>
#include <bitset> 
#include <unordered_map>

using namespace std;
typedef long long LL;
typedef pair<int,int> P;

int k=0;
const int s=6;
int r[s];
int c[s];
int st[s][s];
void debug(){
#if 1
	for(int i=0;i<s;i++){
		cerr << r[i] << " ";
	}
	cerr << endl;
	for(int i=0;i<s;i++){
		cerr << c[i] << " ";
	}
	cerr << endl;
	for(int i=0;i<s;i++){
		for(int j=0;j<s;j++){
			if(st[i][j]){
			cerr << char('a'+st[i][j]-1);
			}
			else{
				cerr << '.';
			}
		}
		cerr << endl;
	}
	cerr << endl;
#endif
}
int f(int i,int j,int k,int t){
	//cerr << i << ", " << j << ", " << k << endl;
	//debug();
	if(j==s){
		//cerr << "bbb" << r[i] << ", " << t << endl;
		if(r[i]!=t){
			//cerr << "aaa" << endl;
			return false;
		}
		return f(i+1,0,k,t);
	}
	if(i==s){
		debug();
		return true;
	}
	if(i<s-1||c[j]==t){
		if(f(i,j+1,k,t)){
			return true;
		}
	}
	if(st[i][j]){
		return false;
	}

	bool ok=false;
	if(j<s-1&&st[i][j+1]==0)
	{
		st[i][j]=k;
		st[i][j+1]=k;
		r[i]++;
		c[j]++;
		c[j+1]++;
		if(r[i]<=t&&((i<s-1&&c[j]<=t)||(c[j]==t))){
			if(f(i,j+1,k+1,t)){
				ok=true;
			}
		}
		r[i]--;
		c[j]--;
		c[j+1]--;
		st[i][j]=0;
		st[i][j+1]=0;
		if(ok)return true;
	}
	if(i<s-1&&st[i+1][j]==0){
		st[i][j]=k;
		st[i+1][j]=k;
		r[i]++;
		r[i+1]++;
		c[j]++;
		if(r[i]<=t&&r[i+1]<=t&&((i<s-1&&c[j]<=t)||(c[j]==t))){
			if(f(i,j+1,k+1,t)){
				ok=true;
			}
		}
		r[i]--;
		r[i+1]--;
		c[j]--;
		st[i][j]=0;
		st[i+1][j]=0;
		if(ok)return true;
	}
	return false;
	
}
char a3[3][4]={
"..a",
"..a",
"bb."
};
char a4[4][5]={
"aabc",
"ddbc",
"efgg",
"efhh",
};
char a5[5][6]={
"..abc",
"..abc",
"ddeef",
"ggh.f",
"iihjj",
};
char a6[6][7]={
"...abc",
"...abc",
"ddee.f",
"..gghf",
"iij.h.",
"kkj.ll",
};
char a7[7][8]={
"....abc",
"....abc",
"....def",
"....def",
"gghh..i",
"jjkk..i",
"llmmnn.",
};

char out[1001][1001];
int main() {
#if 0
	cerr << f(0,0,1,3) << endl;
#else
	int N;
	cin >> N;
	if(N<3){
		cout << -1 << endl;
		return 0;
	}
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			out[i][j]='.';
		}
	}
	if(N==3){
		for(int i=0;i<3;i++){
			for(int j=0;j<3;j++){
				out[i][j]=a3[i][j];
			}
		}
	}
	else if(N%4==0){
		for(int k=0;k<N;k+=4){
			for(int i=0;i<4;i++){
				for(int j=0;j<4;j++){
					out[k+i][k+j]=a4[i][j];
				}
			}
		}
	}
	else if(N%4==1){
		for(int k=0;k<N-5;k+=4){
			for(int i=0;i<4;i++){
				for(int j=0;j<4;j++){
					out[k+i][k+j]=a4[i][j];
				}
			}
		}
		for(int i=0;i<5;i++){
			for(int j=0;j<5;j++){
				out[N-5+i][N-5+j]=a5[i][j];
			}
		}
	}
	else if(N%4==2){
		for(int k=0;k<N-6;k+=4){
			for(int i=0;i<4;i++){
				for(int j=0;j<4;j++){
					out[k+i][k+j]=a4[i][j];
				}
			}
		}
		for(int i=0;i<6;i++){
			for(int j=0;j<6;j++){
				out[N-6+i][N-6+j]=a6[i][j];
			}
		}
	}
	else if(N%4==3){
		for(int k=0;k<N-7;k+=4){
			for(int i=0;i<4;i++){
				for(int j=0;j<4;j++){
					out[k+i][k+j]=a4[i][j];
				}
			}
		}
		for(int i=0;i<7;i++){
			for(int j=0;j<7;j++){
				out[N-7+i][N-7+j]=a7[i][j];
			}
		}

	}
	for(int i=0;i<N;i++){
		cout << out[i] << endl;
	}


	return 0;
#endif
}



Measured memory_bytes: 2176