#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
inline void rd(int &x){
  int k;
  int m=0;
  x=0;
  for(;;){
    k = getchar_unlocked();
    if(k=='-'){
      m=1;
      break;
    }
    if('0'<=k&&k<='9'){
      x=k-'0';
      break;
    }
  }
  for(;;){
    k = getchar_unlocked();
    if(k<'0'||k>'9'){
      break;
    }
    x=x*10+k-'0';
  }
  if(m){
    x=-x;
  }
}
inline void wt_L(char a){
  putchar_unlocked(a);
}
inline void wt_L(int x){
  int s=0;
  int m=0;
  char f[10];
  if(x<0){
    m=1;
    x=-x;
  }
  while(x){
    f[s++]=x%10;
    x/=10;
  }
  if(!s){
    f[s++]=0;
  }
  if(m){
    putchar_unlocked('-');
  }
  while(s--){
    putchar_unlocked(f[s]+'0');
  }
}
inline void wt_L(const char c[]){
  int i=0;
  for(i=0;c[i]!='\0';i++){
    putchar_unlocked(c[i]);
  }
}
int N;
int ans[9][9][9];
int cnt;
int rc[10];
int cc[10];
char res[1000][1002];
int solve(int n, int r, int c){
  int i;
  if(c==n){
    return solve(n,r+1,0);
  }
  if(r==n){
    int i;
    for(i=(0);i<(n);i++){
      if(rc[i] != 3){
        return 0;
      }
    }
    for(i=(0);i<(n);i++){
      if(cc[i] != 3){
        return 0;
      }
    }
    return 1;
  }
  for(i=(0);i<(n);i++){
    if(rc[i] > 3){
      return 0;
    }
  }
  for(i=(0);i<(n);i++){
    if(cc[i] > 3){
      return 0;
    }
  }
  if(ans[n][r][c] != -1){
    return solve(n,r,c+1);
  }
  if(r+1 < n && ans[n][r+1][c] == -1){
    ans[n][r][c] = ans[n][r+1][c] = cnt++;
    rc[r]++;
    rc[r+1]++;
    cc[c]++;
    if(solve(n,r,c+1)){
      return 1;
    }
    rc[r]--;
    rc[r+1]--;
    cc[c]--;
    cnt--;
    ans[n][r][c] = ans[n][r+1][c] = -1;
  }
  if(c+1 < n && ans[n][r][c+1] == -1){
    ans[n][r][c] = ans[n][r][c+1] = cnt++;
    rc[r]++;
    cc[c]++;
    cc[c+1]++;
    if(solve(n,r,c+1)){
      return 1;
    }
    rc[r]--;
    cc[c]--;
    cc[c+1]--;
    cnt--;
    ans[n][r][c] = ans[n][r][c+1] = -1;
  }
  if(solve(n,r,c+1)){
    return 1;
  }
  return 0;
}
int main(){
  int i, n;
  int r;
  rd(N);
  if(N==2){
    wt_L(-1);
    wt_L('\n');
    return 0;
  }
  if(N==3){
    wt_L("aa.");
    wt_L('\n');
    wt_L("..a");
    wt_L('\n');
    wt_L("..a");
    wt_L('\n');
    return 0;
  }
  for(n=(4);n<(8);n++){
    int i;
    for(i=(0);i<(n);i++){
      int j;
      for(j=(0);j<(n);j++){
        ans[n][i][j] = -1;
      }
    }
    for(i=(0);i<(n);i++){
      rc[i] = cc[i] = 0;
    }
    cnt = 0;
    solve(n,0,0);
  }
  for(i=(0);i<(N);i++){
    int j;
    for(j=(0);j<(N);j++){
      res[i][j] = '.';
    }
  }
  r = N;
  while(r >= 8){
    r -= 4;
    for(i=(0);i<(4);i++){
      int j;
      for(j=(0);j<(4);j++){
        if(ans[4][i][j] >= 0){
          res[r+i][r+j] = ans[4][i][j] + 'a';
        }
      }
    }
  }
  for(i=(0);i<(r);i++){
    int j;
    for(j=(0);j<(r);j++){
      if(ans[r][i][j] >= 0){
        res[i][j] = ans[r][i][j] + 'a';
      }
    }
  }
  for(i=(0);i<(N);i++){
    wt_L(res[i]);
    wt_L('\n');
  }
  return 0;
}
// cLay varsion 20191227-1

// --- original code ---
// int N;
// 
// int ans[9][9][9], cnt;
// int rc[10], cc[10];
// char res[1000][1002];
// 
// int solve(int n, int r, int c){
//   if(c==n) return solve(n,r+1,0);
//   if(r==n){
//     rep(i,n) if(rc[i] != 3) return 0;
//     rep(i,n) if(cc[i] != 3) return 0;
//     return 1;
//   }
// 
//   rep(i,n) if(rc[i] > 3) return 0;
//   rep(i,n) if(cc[i] > 3) return 0;
// 
//   if(ans[n][r][c] != -1) return solve(n,r,c+1);
// 
//   if(r+1 < n && ans[n][r+1][c] == -1){
//     ans[n][r][c] = ans[n][r+1][c] = cnt++;
//     rc[r]++;
//     rc[r+1]++;
//     cc[c]++;
//     if(solve(n,r,c+1)) return 1;
//     rc[r]--;
//     rc[r+1]--;
//     cc[c]--;
//     cnt--;
//     ans[n][r][c] = ans[n][r+1][c] = -1;
//   }
//   if(c+1 < n && ans[n][r][c+1] == -1){
//     ans[n][r][c] = ans[n][r][c+1] = cnt++;
//     rc[r]++;
//     cc[c]++;
//     cc[c+1]++;
//     if(solve(n,r,c+1)) return 1;
//     rc[r]--;
//     cc[c]--;
//     cc[c+1]--;
//     cnt--;
//     ans[n][r][c] = ans[n][r][c+1] = -1;
//   }
// 
//   if(solve(n,r,c+1)) return 1;
// 
//   return 0;
// }
// 
// {
//   int r;
//   rd(N);
// 
//   if(N==2) wt(-1), return 0;
//   if(N==3){
//     wt("aa.");
//     wt("..a");
//     wt("..a");
//     return 0;
//   }
// 
//   rep(n,4,8){
//     rep(i,n) rep(j,n) ans[n][i][j] = -1;
//     rep(i,n) rc[i] = cc[i] = 0;
//     cnt = 0;
//     solve(n,0,0);
//   }
// 
//   rep(i,N) rep(j,N) res[i][j] = '.';
//   r = N;
//   while(r >= 8){
//     r -= 4;
//     rep(i,4) rep(j,4) if(ans[4][i][j] >= 0) res[r+i][r+j] = ans[4][i][j] + 'a';
//   }
//   rep(i,r) rep(j,r) if(ans[r][i][j] >= 0) res[i][j] = ans[r][i][j] + 'a';
// 
//   rep(i,N) wt(res[i]);
// }


Measured memory_bytes: 2176