#include //#include #pragma GCC optimize("Ofast") //#pragma GCC target("avx2") #pragma GCC optimize("unroll-loops") using namespace std; //#include //#include //namespace mp=boost::multiprecision; //#define mulint mp::cpp_int //#define mulfloat mp::cpp_dec_float_100 struct __INIT{__INIT(){cin.tie(0);ios::sync_with_stdio(false);cout<=0;(i)--) #define flc(x) __builtin_popcountll(x) #define pint pair #define pdouble pair #define plint pair #define fi first #define se second #define all(x) x.begin(),x.end() //#define vec vector #define nep(x) next_permutation(all(x)) typedef long long lint; int dx[8]={1,1,0,-1,-1,-1,0,1}; int dy[8]={0,1,1,1,0,-1,-1,-1}; const int MAX_N=3e5+5; templatebool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b bucket[MAX_N/1000]; constexpr int MOD=1000000007; //constexpr int MOD=998244353; /*#include using namespace atcoder; typedef __int128_t llint;*/ vector binoms; lint calc(lint N){ if(N==1) return 0; else{ binoms.push_back({N,N/2}); return N+1+calc(N/2)+calc((N+1)/2); } } lint com(lint n,lint r){ lint ret=1; rep(i,r){ ret*=(n-i); ret/=i+1; } return ret; } int main(void){ lint N; cin >> N; calc(N); if(N==1){ cout << 1 << " " << 1 << endl; cout << "." << endl; return 0; } lint H=1,W=1; char S[2000][2000]; rep(i,2000) rep(j,2000) S[i][j]='#'; for(auto e:binoms){ lint addh=e.fi-e.se,addw=e.se; for(int i=H;i<=H+addh;i++){ for(int j=W;j<=W+addw;j++) S[i-1][j-1]='.'; } H+=addh,W+=addw; if(H>W) W++; else H++; S[H-1][W-1]='.'; } cout << H << " " << W << endl; rep(i,H){ rep(j,W) cout << S[i][j]; cout << endl; } }