#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) { //clog<<k<<' '<<n<<' '<<m<<endl; assert(n>1 && m>1); if (k==0) return vector<string>(n,string(m,'.')); if (n<m) return trp(solve(k,m,n)); ll u=k/(m*(m-1)/2); ll kol=1; while ((kol+1)*kol/2<=u) ++kol; ll os=k-(kol*(kol-1)/2)*(m*(m-1)/2); ll a=1; while (a*(a+1)/2*kol<=os) ++a; assert(n+1>kol); vector<string> v=solve(os-a*(a-1)/2*kol,n-kol-2,m); v.pb(string(m,'.')); v.pb(string(a,'#')+string(m-a,'.')); 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; }