#include <bits/stdc++.h> using namespace std; #define int long long constexpr int SZ = 2025; int calc(int n, int m){ return (n*m)*(n*m-n-m+1)/4; } int32_t main(){ int k;cin>>k; vector<pair<int,int>> rect; for (int i = SZ; i >= 2 && !rect.size(); i--){ for (int j = SZ; j >= 2 && !rect.size(); j--){ if (calc(i, j)<=k){ rect.push_back({j,i}); k-=calc(i,j); break; } } } int kalan = SZ - rect[0].first - 1; vector<bool> ayni(1,23); bool bb = true; while (k > 0){ for (int i = kalan; i >= 2; i--){ for (int j = SZ; j >= 2; j--){ if (calc(i, j) <= k){ k -= calc(i, j); ayni.push_back(bb); rect.push_back({i, j}); kalan -= i + 1; bb = false; goto mahmut; } } } kalan = SZ - rect[0].first - 1; bb = true; mahmut:; } cout<<SZ<<" "<<SZ<<endl; vector<string> ans(SZ, string(SZ,'.')); for (int i = 0; i < rect[0].first; i++){ for (int j = 0; j < rect[0].second; j++){ ans[i][j]='#'; } } int yuk = rect[0].first + 1; int pref = 0; int mma = 0; for (int k = 1; k < rect.size(); k++){ for (int i = 0; i < rect[k].first; i++){ for (int j = 0; j < rect[k].second; j++){ assert(i+yuk < SZ && pref + j < SZ); assert(ans[i+yuk][pref+j]='.'); ans[i+yuk][pref+j]='#'; } } mma = max(mma, pref + rect[k].second + 1); if (k + 1 < rect.size()){ if (!ayni[k+1]){ yuk += rect[k].first + 1; } else { pref = mma; yuk = rect[0].first + 1; mma = pref; } } } for (int i = 0; i < SZ; i++) { cout<<ans[i]<<'\n'; } }