//teja349
#include <bits/stdc++.h>
#include <vector>
#include <set>
#include <map>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <climits>
#include <utility>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <iomanip>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp> 
//setbase - cout << setbase (16); cout << 100 << endl; Prints 64
//setfill -   cout << setfill ('x') << setw (5); cout << 77 << endl; prints xxx77
//setprecision - cout << setprecision (14) << f << endl; Prints x.xxxx
//cout.precision(x)  cout<<fixed<<val;  // prints x digits after decimal in val

using namespace std;
using namespace __gnu_pbds;

#define f(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) f(i,0,n)
#define fd(i,a,b) for(i=a;i>=b;i--)
#define pb push_back
#define mp make_pair
#define vi vector< int >
#define vl vector< ll >
#define ss second
#define ff first
#define ll long long
#define pii pair< int,int >
#define pll pair< ll,ll >
#define sz(a) a.size()
#define inf (1000*1000*1000+5)
#define all(a) a.begin(),a.end()
#define tri pair<int,pii>
#define vii vector<pii>
#define vll vector<pll>
#define viii vector<tri>
#define mod (1000*1000*1000+7)
#define pqueue priority_queue< int >
#define pdqueue priority_queue< int,vi ,greater< int > >
#define flush fflush(stdout) 
#define primeDEN 727999983
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

// find_by_order()  // order_of_key
typedef tree<
int,
null_type,
less<int>,
rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;

vector<string> str;
int get3(){
	str.clear();
	str.pb("aa.");
	str.pb("..b");
	str.pb("..b");
}
int get4(){
	str.clear();
	str.pb("aabc");
	str.pb("ccbc");
	str.pb("deff");
	str.pb("degg");
	//return str;
}
int get5(){
	//vector<string> str;
	str.clear();
	str.pb("abcc.");
	str.pb("ab.dd");
	str.pb("caabb");
	str.pb("c.c.a");
	str.pb("ddc.a");
}
int get7(){
//vector<string> str;
	str.clear();
	str.pb("abcc...");
	str.pb("ab...dd");
	str.pb("caabb..");
	str.pb("c.c.a..");
	str.pb("ddc.a..");
	str.pb("...abcc");
	str.pb("...abdd");
}

vector<string> gg;
int main(){
    std::ios::sync_with_stdio(false); cin.tie(NULL);
    int n;
    cin>>n;
    int i,j,k;
    string boo="";
    rep(i,n){
    	boo+=".";
    }
    rep(i,n){
    	gg.pb(boo);
    }
    if(n==2){
    	cout<<-1<<endl;
    }
    else if(n==3){
    	get3();
    	rep(i,str.size()){
    		cout<<str[i]<<endl;
    	}
    }
    else if(n==4){
    	get4();
    	rep(i,str.size()){
    		cout<<str[i]<<endl;
    	}
    }
    else if(n==5){
    	get5();
    	rep(i,str.size()){
    		cout<<str[i]<<endl;
    	}
    }
    else if(n==6){
    	get3();
    	int st=0;
    	rep(k,2){
    		rep(i,str.size()){
    			rep(j,str[i].size()){
    				gg[i+st][j+st]=str[i][j];
    			}
    		}
    		st+=3;
    	}
    	rep(i,n){
    		cout<<gg[i]<<endl;
    	}
    }
    else if(n==7){
    	get7();
    	rep(i,str.size()){
    		cout<<str[i]<<endl;
    	}
    }
    else if(n==8){
    	get4();
    	int st=0;
    	rep(k,2){
    		rep(i,str.size()){
    			rep(j,str[i].size()){
    				gg[i+st][j+st]=str[i][j];
    			}
    		}
    		st+=4;
    	}
    	rep(i,n){
    		cout<<gg[i]<<endl;
    	}
    }
    else if(n==9){
    	get3();
    	int st=0;
    	rep(k,3){
    		rep(i,str.size()){
    			rep(j,str[i].size()){
    				gg[i+st][j+st]=str[i][j];
    			}
    		}
    		st+=3;
    	}
    	rep(i,n){
    		cout<<gg[i]<<endl;
    	}
    }
    else if(n==10){
    	get5();
    	int st=0;
    	rep(k,2){
    		rep(i,str.size()){
    			rep(j,str[i].size()){
    				gg[i+st][j+st]=str[i][j];
    			}
    		}
    		st+=5;
    	}
    	rep(i,n){
    		cout<<gg[i]<<endl;
    	}
    }
    else if(n==11){
    	get4();
    	int st=0;
    	rep(k,1){
    		rep(i,str.size()){
    			rep(j,str[i].size()){
    				gg[i+st][j+st]=str[i][j];
    			}
    		}
    		st+=4;
    	}
    	get7();
    	rep(k,1){
    		rep(i,str.size()){
    			rep(j,str[i].size()){
    				gg[i+st][j+st]=str[i][j];
    			}
    		}
    		st+=7;
    	}
    	
    	rep(i,n){
    		cout<<gg[i]<<endl;
    	}
    }
    else{
    	rep(i,1234){
    		if((n-4*i)%5==0)
    			break;
    	}
    	int hh=i;
    	get4();
    	int st=0;
    	rep(k,hh){
    		rep(i,str.size()){
    			rep(j,str[i].size()){
    				gg[i+st][j+st]=str[i][j];
    			}
    		}
    		st+=4;
    	}
    	get5();
    	hh=(n-4*hh)/5;
    	rep(k,hh){
    		rep(i,str.size()){
    			rep(j,str[i].size()){
    				gg[i+st][j+st]=str[i][j];
    			}
    		}
    		st+=5;
    	}
    	rep(i,n){
    		cout<<gg[i]<<endl;
    	}
    }
    return 0;   
}


Measured memory_bytes: 2304