#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; } // cout << "--------------------\n"; // cout << "cur: " << sx << ' ' << sy << '\n'; // for(int i = 0; i < maxn; i++){ // for(int j = 0; j < maxn; j++){ // cout << (a[i][j] ? '.' : '#'); // } // cout << '\n'; // } assert(sx < maxn); assert(sy < maxn); int lenx = maxn - sx, leny = maxn - sy; // cout << lenx << ' ' << leny << '\n'; if(lenx < leny){ // cout << "x\n"; int j = 1; while(get(lenx) * get(j) <= k && j < leny) ++j; if(get(lenx) * get(j) > k) --j; if(j == 1){ // rossz eset for(int i = sy; i < maxn; i++) a[sx][i] = true; solve(k, sx + 1, 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 { // cout << "y\n"; int j = 1; while(get(leny) * get(j) <= k && j < lenx) ++j; if(get(leny) * get(j) > k) --j; // cout << "cur j: " << j << '\n'; if(j == 1){ // rossz eset for(int i = sx; i < maxn; i++) a[i][sy] = true; solve(k, sx, sy + 1); 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; }