#include <iostream> #include <cassert> using namespace std; const int sz=2025; long long mat[sz+100][sz+100]; long long k,topline; void add() { long long i,j; long long top=topline; for(i=1; i<=sz; i++) { mat[top][i]=1; } for(i=top+1; i<=sz; i++) { for(j=1; j<=sz; j++) { if((j-1)*(i-top)<=k) { k-=(j-1)*(i-top); mat[i][j]=1; } else { topline=i+2; return; } } } } void add2() { long long i,j; long long top=topline; for(i=1; i<=sz; i++) { mat[top][i]=1; } int poz=1; int leng; while(k) { for(leng=1; poz+leng<=sz; leng++) { if(leng*(leng-1)/2>k) { break; } } leng--; k-=(leng-1)*(leng)/2; for(j=poz; j<=poz+leng-1; j++) { mat[top+1][j]=1; } poz=poz+leng+1; topline+=3; if(poz>=sz-2) { break; } } } signed main() { long long n,i,j; cin>>k; cout<<sz<<" "<<sz<<'\n'; topline=1; add(); add(); while(k!=0) { add2(); } assert(topline <= 2027); for(i=1; i<=sz; i++) { for(j=1; j<=sz; j++) { if(mat[i][j]==1) { cout<<"#"; } else { cout<<"."; } //cout<<mat[i][j]; } cout<<endl; } return 0; }