// while (clock()<=69*CLOCKS_PER_SEC)
// #pragma comment(linker, "/stack:200000000")
// #pragma GCC optimize("O3")
// #pragma GCC optimize("Ofast")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
// #pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

#define pb push_back
#define SZ(x) ((int)(x).size())
#define ALL(x) x.begin(),x.end()
#define all(x) x.begin(),x.end()
#define fi first
#define se second
#define _upgrade ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define erase_duplicates(x) sort(all(x)); (x).resize(distance((x).begin(), unique(all(x))));


using namespace std;
using namespace __gnu_pbds;
template<typename T>
using ordered_set = tree<
T,
null_type,
less<T>,
rb_tree_tag,
tree_order_statistics_node_update>;

//X.find_by_order(k); - zwraca iterator na k-ty element (numeracja od zerowego)
//X.order_of_key(k); - zwraca liczbę elementów ostro mniejszych niż k

typedef long long LL;
typedef pair<int,int> PII;
typedef pair<LL,LL> PLL;
typedef vector<PII> VPII;
typedef vector<PLL> VPLL;
typedef vector<LL> VLL;
typedef vector<int> VI;
typedef vector<string> VS;
typedef vector<char> VC;
typedef long double LD;
typedef pair<LD,LD> PLD;
typedef vector<LD> VLD;
typedef vector<PLD> VPLD;

template<class TH> void _dbg(const char *sdbg, TH h){ cerr<<sdbg<<" = "<<h<<endl; }
template<class TH, class... TA> void _dbg(const char *sdbg, TH h, TA... a) {
  while(*sdbg!=',')cerr<<*sdbg++;
  cerr<<" = "<<h<<", "; _dbg(sdbg+1, a...);
}

#ifdef LOCAL
#define dbg(...) _dbg(#__VA_ARGS__, __VA_ARGS__)
#else
#define dbg(...)
#define cerr if(0)cout
#endif

const int maxn = (1e3)+7;
const int maxk = 20;
const int inf = (1e9)+7;
const LL LLinf = ((LL)1e18)+7LL;
const LD eps = 1e-9;
const LL mod = 1e9+7;

// ***************************** CODE ***************************** //

char odp[maxn][maxn];

void wstaw(int pos, int co)
{
  if(co == 3)
  {
    odp[pos][pos] = odp[pos][pos + 1] = 'z';
    odp[pos + 1][pos + 2] = odp[pos + 2][pos + 2] = 'y';
  }
  if(co == 4)
  {
    odp[pos + 0][pos + 0] = odp[pos + 0][pos + 1] = 'a';
    odp[pos + 1][pos + 0] = odp[pos + 1][pos + 1] = 'b';
    odp[pos + 0][pos + 2] = odp[pos + 1][pos + 2] = 'c';
    odp[pos + 0][pos + 3] = odp[pos + 1][pos + 3] = 'd';
    odp[pos + 2][pos + 0] = odp[pos + 3][pos + 0] = 'e';
    odp[pos + 2][pos + 1] = odp[pos + 3][pos + 1] = 'f';
    odp[pos + 2][pos + 2] = odp[pos + 2][pos + 3] = 'g';
    odp[pos + 3][pos + 2] = odp[pos + 3][pos + 3] = 'h';
  }
  if(co == 5)
  {
    odp[pos][pos] = odp[pos][pos + 1] = 'a';
    odp[pos][pos + 2] = odp[pos][pos + 3] = 'b';
    odp[pos][pos + 4] = 'c';
    odp[pos + 1][pos + 4] = 'c';
    odp[pos + 2][pos + 4] = 'd';
    odp[pos + 3][pos + 4] = 'd';
    odp[pos + 4][pos + 4] = 'e';
    odp[pos + 4][pos + 3] = 'e';
    odp[pos + 4][pos + 2] = 'f';
    odp[pos + 4][pos + 1] = 'f';
    odp[pos + 4][pos] = 'g';
    odp[pos + 3][pos] = 'g';
    odp[pos + 2][pos] = 'h';
    odp[pos + 1][pos] = 'h';
    wstaw(pos + 1, 3);
  }
  if(co == 7)
  {
    wstaw(pos, 3);
    wstaw(pos + 3, 3);
    for(int i = 0;i < 3;i++)
      for(int j = 0;j < 3;j++)
      {
        odp[pos + i + 3][pos + j] = odp[pos + i][pos + j];
        odp[pos + i][pos + j + 3] = odp[pos + i][pos + j];
      }
    odp[pos + 6][pos] = odp[pos + 6][pos + 1] = 'a';
    odp[pos + 6][pos + 2] = odp[pos + 6][pos + 3] = 'b';
    odp[pos + 6][pos + 4] = odp[pos + 6][pos + 5] = 'c';
    odp[pos][pos + 6] = odp[pos + 1][pos + 6] = 'd';
    odp[pos + 2][pos + 6] = odp[pos + 3][pos + 6] = 'e';
    odp[pos + 4][pos + 6] = odp[pos + 5][pos + 6] = 'f';
  }
}

int N;
int n;

void wypisz()
{
  n = N;
  for(int i = 0;i < n;i++)
  {
    for(int j = 0;j < n;j++)
      cout<<odp[i][j];
    cout<<"\n";
  }
  exit(0);
}

int main()
{
	_upgrade
  cin>>n;
  N = n;
  for(int i = 0;i < n;i++)
    for(int j = 0;j < n;j++)
      odp[i][j] = '.';
  if(n == 2)
  {
    cout<<-1;
    return 0;
  }
  if(n == 3)
  {
    wstaw(0, 3);
    wypisz();
  }
  if(n == 6)
  {
    wstaw(0, 3);
    wstaw(3, 3);
    wypisz();
  }
  if(n == 7)
  {
    wstaw(0, 7);
    wypisz();
  }
  if(n == 4)
  {
    wstaw(0, 4);
    wypisz();
  }
  if(n == 5)
  {
    wstaw(0, 5);
    wypisz();
  }
  while(n > 11)
  {
    wstaw(n - 4, 4);
    n -= 4;
  }
  if(n == 8)
  {
    wstaw(0, 4);
    wstaw(4, 4);
    wypisz();
  }
  if(n == 9)
  {
    wstaw(0, 4);
    wstaw(4, 5);
    wypisz();
  }
  if(n == 10)
  {
    wstaw(0, 5);
    wstaw(5, 5);
    wypisz();
  }
  if(n == 11)
  {
    wstaw(0, 7);
    wstaw(7, 4);
    wypisz();
  }
  return 0;
}


Measured memory_bytes: 2176