#include <bits/stdc++.h> using namespace std; const long long maxk = 4e12; int maxn = 2025; long long get(long long n) { return n * (n - 1) / 2; } bool a[2050][2050]; void solve(long long k, int sx, int sy) { if(k == 0) { for(int i = sx; i < maxn; i++) { for(int j = sy; j < maxn; j++) { a[i][j] = true; } } return; } //cout << "solve " << k << " " << sx << " " << sy << "\n"; if (sx>=maxn || sy>=maxn) { cout << "baj\n"; assert(false); return; } assert(sx < maxn); assert(sy < maxn); int lenx = maxn - sx, leny = maxn - sy; //cout << "ossz " << get(lenx)*get(leny) << "\n"; if (lenx<=1 || leny<=1) { cout << "baj\n"; assert(false); return; } // if(lenx > leny) { // swap(lenx, leny); // swap(sx, sy); // for(int i = 0; i < maxn; i++){ // for(int j = i + 1; j < maxn; j++){ // swap(a[i][j], a[j][i]); // } // } // } if(lenx < leny){ int j = 1; while(get(lenx) * get(j) <= k && j < leny) ++j; if(get(lenx) * get(j) > k) --j; if(j == 1){ // rossz eset int g = 1; while(get(g) <= k) ++g; --g; for(int i = sx + g; i < maxn; i++) a[i][sy] = true, a[i][sy+1]=true; for(int i = sx; i < maxn; i++) a[i][sy+2] = true; // for(int i = sx; i < maxn; i++) a[i][sy] = true; solve(k - get(g), sx, sy + 3); return; } long long remk=k-get(lenx)*get(j); if(j < leny){ for(int i = sx; i < maxn; i++) a[i][sy + 1] = true, a[i][sy+2]=true; long long add=0; for (int i=sx; i<maxn; i++) { if (add*j<=remk) { remk-=add*j; add++; a[i][sy+1]=false; } } } solve(remk, sx, sy + j + 2); } else { int j = 1; while(get(leny) * get(j) <= k && j < lenx) ++j; if(get(leny) * get(j) > k) --j; //cout << "proba " << lenx << " " << leny << "\n"; if(j == 1){ // rossz eset int g = 1; while(get(g) <= k) ++g; --g; //cout << "fontos " << g << " " << get(g) << "\n"; for(int i = sy + g; i < maxn; i++) a[sx][i] = a[sx+1][i] = true; for(int i = sy; i < maxn; i++) a[sx+2][i] = true; // for(int i = sy; i < maxn; i++) a[sx][i] = true; solve(k - get(g), sx + 3, sy); return; } long long remk=k-get(leny)*get(j); if(j < lenx){ for(int i = sy; i < maxn; i++) a[sx+1][i] = true, a[sx+2][i]=true; long long add=0; for (int i=sy; i<maxn; i++) { if (add*j<=remk) { remk-=add*j; add++; a[sx+1][i]=false; } } } solve(remk, sx + j + 1, sy); } } bool test=0; long long vel() { long long maxval=4'000'000'000'000; //maxval=100; long long a=rand(), b=rand(), c=rand(), d=rand(), e=rand(); long long prod=abs(a*b*c*d%maxval)+1; return prod+(maxval-prod)*5/6; return prod; } int main(){ ios_base::sync_with_stdio(false); srand(time(0)); cin.tie(0); long long k; if (!test) cin>>k; else { k=vel(); cout << k << "\n"; //exit(0); } //k=3965912846181; solve(k, 0, 0); cout << maxn << ' ' << maxn << '\n'; for(int i = 0; i < maxn; i++){ for(int j = 0; j < maxn; j++){ cout << (a[i][j] ? '.' : '#'); } cout << '\n'; } //cout << "sikerult\n"; return 0; } /* 3965912846181 */