#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const ll N=2025,M=N;
const ll NMAX=N+5;
char ans[NMAX][NMAX];
void solve(ll offseti, ll offsetj, ll k){
	ll n=N-offseti,m=M-offsetj;
	assert(k<=n*(n-1)*m*(m-1)/4);
	if(k<n*(n-1)/2+m*(m-1)/2-1){
		ll i=offseti,j=offsetj;
		while(k>0){
			ll deltai;
			assert(j+1<M);
			for(deltai=2;i+deltai<=N && deltai*(deltai+1)/2<=k;deltai++);
			k-=deltai*(deltai-1)/2;
			for(ll i2=i;i2<i+deltai;i2++)
				ans[i2][j]=ans[i2][j+1]='#';
			j+=3;
		}
		return;
	}
	else{
		//cerr<<"here\n";
		ll Ansi=0,Ansj=0,newk=1e18;
		for(ll deltai=2;deltai<=n;deltai++){
			for(ll deltaj=max(2ll,(ll)(deltai*0.9));deltaj<=m && deltaj<=deltai/0.9;deltaj++){
				ll p1=n*(n-1)/2,p2=deltai*(deltai-1)/2,p3=deltaj*(deltaj-1)/2;
				ll s=p1*p2+p1*p3-p2*p3;
				if(k-s<newk && k-s>=0)
					newk=k-s,Ansi=deltai,Ansj=deltaj;
			}
		}
		for(ll i=0;i<n;i++){
			for(ll j=0;j<m;j++){
				if(i<Ansi || j<Ansj){
					ans[i+offseti][j+offsetj]='#';
				}
			}
		}
		cerr<<Ansi<<' '<<Ansj<<' '<<newk<<'\n';
		solve(offseti+Ansi+1,offsetj+Ansj+1,newk);
	}
} 
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	ll k;
	cin>>k;
	for(ll i=0;i<N;i++) for(ll j=0;j<M;j++) ans[i][j]='.';
	solve(0,0,k);
	cout<<N<<' '<<M<<'\n';
	for(ll i=0;i<N;i++){
		for(ll j=0;j<M;j++) cout<<ans[i][j];
		cout<<'\n';
	}
	return 0;
}