#include <bits/stdc++.h> #define X first #define Y second #define PB push_back #define x first #define y second #define pb push_back using namespace std; typedef long long ll; typedef vector<int> vi; const int N=300010,MOD=1e9+7; const char en='\n'; const ll LLINF=1ll<<60; vector<string> trp(vector<string> a) { int n=a.size(),m=a[0].size(); vector<string> b(m,string(n,'.')); for (int i=0;i<n;++i) for (int j=0;j<m;++j) b[j][i]=a[i][j]; return b; } vector<string> solve(ll k,ll n,ll m) { assert(n>1 && m>1); if (k<=((n+1)/3)*((m+1)/3)) { vector<string> v(n,string(m,'.')); for (int i=0;i<n-1;i+=3) for (int j=0;j<m-1;j+=3) if (k) { v[i][j]=v[i+1][j+1]=v[i+1][j]=v[i][j+1]='#'; --k; } return v; } if (n>m) return trp(solve(k,m,n)); if (k>=m*(m-1)/2) { ll u=k/(m*(m-1)/2); ll kol=2; while ((kol+1)*kol/2<=u) ++kol; assert(n>kol); vector<string> v=solve(k-(kol*(kol-1)/2)*(m*(m-1)/2),n-kol-1,m); v.pb(string(m,'.')); for (int i=0;i<kol;++i) v.pb(string(m,'#')); return v; } if (k>=n*(n-1)/2) { ll u=k/(n*(n-1)/2); ll kol=2; while ((kol+1)*kol/2<=u) ++kol; assert(m>kol); vector<string> v=solve(k-(kol*(kol-1)/2)*(n*(n-1)/2),n,m-kol-1); for (int i=0;i<n;++i) { v[i].pb('.'); for (int j=0;j<kol;++j) v[i].pb('#'); } return v; } vector<string> v=solve(k,n-1,m-1); for (int i=0;i<n-1;++i) v[i].pb('.'); v.pb(string(m,'.')); return v; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); ll k; cin>>k; int n=2025,m=2025; vector<string> odg=solve(k,n,m); cout<<n<<' '<<m<<endl; for (auto x: odg) cout<<x<<en; }