#include <bits/stdc++.h> using namespace std; const long long maxk = 4e12; const int maxn = 2025; long long get(long long n) { return n * (n - 1) / 2; } bool a[maxn][maxn]; 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; } assert(sx < maxn); assert(sy < maxn); int lenx = maxn - sx, leny = maxn - sy; // 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 = 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; } if(j < leny){ for(int i = sx; i < maxn; i++) a[i][sy + j] = true; } solve(k - get(lenx) * get(j), sx, sy + j + 1); } else { int j = 1; while(get(leny) * get(j) <= k && j < lenx) ++j; if(get(leny) * 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] = 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; } if(j < lenx){ for(int i = sy; i < maxn; i++) a[sx + j][i] = true; } solve(k - get(leny) * get(j), sx + j + 1, sy); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); long long k; cin>>k; 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'; } return 0; }