#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; }