#include <stdio.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <stdlib.h>
#include <ctime>
#include <cmath>
#include <complex>
#include <iostream>
#include <cctype>
#include <cstring>
#include <bitset>
#include <stack>
#include <functional>
#include <cassert>
#include <tuple>
#include <iomanip>
using namespace std;
#define ll long long
#define mp make_pair
#define pb push_back
#define ldb long double
#define mt make_tuple
template<typename T> bool ckmn(T &a, T b){ T c=a;a=min(a,b);return a!=c;}
template<typename T> bool ckmx(T &a, T b){ T c=a;a=max(a,b);return a!=c;}
const int N=1005;
char ans[N][N];
void Solve3(int n)
{
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			ans[i][j]='.';
	for(int i=1;i<=n;i+=3)
	{
		ans[i][i+1]='a';
		ans[i][i+2]='a';
		ans[i+1][i]='b';
		ans[i+2][i]='b';
	}
	for(int i=1;i<=n;i++) printf("%s\n",ans[i]+1);
}
void Solve4(int n)
{
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			ans[i][j]='.';
	for(int i=1;i<=n;i+=4)
	{
		ans[i][i]='a';
		ans[i][i+1]='a';
		ans[i+1][i]='b';
		ans[i+1][i+1]='b';
		ans[i+2][i]='c';
		ans[i+3][i]='c';
		ans[i+2][i+1]='d';
		ans[i+3][i+1]='d';
		ans[i][i+2]='e';
		ans[i+1][i+2]='e';
		ans[i][i+3]='f';
		ans[i+1][i+3]='f';
		ans[i+2][i+2]='g';
		ans[i+2][i+3]='g';
		ans[i+3][i+2]='h';
		ans[i+3][i+3]='h';
	}
	for(int i=1;i<=n;i++) printf("%s\n",ans[i]+1);
}
void Add3_1(int x, int y)
{
	ans[x+1][y]='a';
	ans[x+2][y]='a';
	ans[x][y+1]='b';
	ans[x][y+2]='b';
}
void Add3_2(int x, int y)
{
	ans[x][y]='c';
	ans[x][y+1]='c';
	ans[x][y+2]='d';
	ans[x+1][y+2]='d';
	ans[x+2][y+2]='e';
	ans[x+2][y+1]='e';
	ans[x+2][y]='f';
	ans[x+1][y]='f';
}
void Solve64(int n)
{
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			ans[i][j]='.';
	Add3_1(1,1);
	Add3_1(4,4);
	Add3_2(1,4);
	Add3_2(4,1);
	for(int i=7;i<=n;i+=4)
	{
		ans[i][i]='a';
		ans[i][i+1]='a';
		ans[i+1][i]='b';
		ans[i+1][i+1]='b';
		ans[i+2][i]='c';
		ans[i+3][i]='c';
		ans[i+2][i+1]='d';
		ans[i+3][i+1]='d';
		ans[i][i+2]='e';
		ans[i+1][i+2]='e';
		ans[i][i+3]='f';
		ans[i+1][i+3]='f';
		ans[i+2][i+2]='g';
		ans[i+2][i+3]='g';
		ans[i+3][i+2]='h';
		ans[i+3][i+3]='h';
	}
	for(int i=1;i<=n;i++) printf("%s\n",ans[i]+1);
}
void Add3(int x, int y)
{
	ans[x][y+1]='a';
	ans[x][y+2]='a';
	ans[x+1][y]='b';
	ans[x+2][y]='b';
}
void Add7(int x, int y)
{
	Add3(x,y);
	ans[x][y+3]=ans[x][y+4]='c';
	ans[x][y+5]=ans[x][y+6]='d';
	ans[x+1][y+3]=ans[x+1][y+4]='e';
	ans[x+1][y+5]=ans[x+1][y+6]='f';
	ans[x+2][y+3]=ans[x+2][y+4]='g';
	ans[x+2][y+5]=ans[x+2][y+6]='h';
	ans[x+3][y]=ans[x+4][y]='c';
	ans[x+5][y]=ans[x+6][y]='d';
	ans[x+3][y+1]=ans[x+4][y+1]='e';
	ans[x+5][y+1]=ans[x+6][y+1]='f';
	ans[x+3][y+2]=ans[x+4][y+2]='g';
	ans[x+5][y+2]=ans[x+6][y+2]='h';
}
void Add6(int x, int y)
{
	Add3_1(x,y);
	Add3_1(x+3,y+3);
	Add3_2(x,y+3);
	Add3_2(x+3,y);
}
void Add4(int x, int i)
{
	ans[x][i]='a';
	ans[x][i+1]='a';
	ans[x+1][i]='b';
	ans[x+1][i+1]='b';
	ans[x+2][i]='c';
	ans[x+3][i]='c';
	ans[x+2][i+1]='d';
	ans[x+3][i+1]='d';
	ans[x][i+2]='e';
	ans[x+1][i+2]='e';
	ans[x][i+3]='f';
	ans[x+1][i+3]='f';
	ans[x+2][i+2]='g';
	ans[x+2][i+3]='g';
	ans[x+3][i+2]='h';
	ans[x+3][i+3]='h';
}
void Solve5()
{
	for(int i=1;i<=5;i++)
		for(int j=1;j<=5;j++)
			ans[i][j]='.';
	Add3_2(1,1);
	ans[1][4]=ans[1][5]='g';
	ans[2][4]=ans[2][5]='h';
	ans[3][4]=ans[3][5]='i';
	ans[4][1]=ans[5][1]='g';
	ans[4][2]=ans[5][2]='h';
	ans[4][3]=ans[5][3]='i';
	for(int i=1;i<=5;i++) printf("%s\n",ans[i]+1);
}
int main()
{
	int n;
	scanf("%i",&n);
	if(n%3==0) Solve3(n);
	else if(n%4==0) Solve4(n);
	else if(n==5) Solve5();
	else
	{
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				ans[i][j]='.';
		int ptr=1;
		while(ptr<=n)
		{
			if((n-ptr+1)%4==2) Add6(ptr,ptr),ptr+=6;
			else if((n-ptr+1)%4==0) Add4(ptr,ptr),ptr+=4;
			else Add7(ptr,ptr),ptr+=7;
			//printf("%i\n",ptr);
		}
		if(ptr!=n+1) printf("-1\n");
		else
		{
			for(int i=1;i<=n;i++) printf("%s\n",ans[i]+1);
		}
	}
	return 0;
}

Measured memory_bytes: 2176