#define _CRT_SECURE_NO_DEPRECATE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define mpair make_pair #define all(v) v.begin(),v.end() using namespace std; typedef long long ll; typedef long double ld; const ld epsylon = 1e-9; long long evkl(long long a,long long b) { long long r; if(b>a) swap(b,a); if(a==0) { if(b!=0) return b; else return 1; } if(b==0) return a; while(a%b) { r=a%b; a=b; b=r; } return b; } long long comb(int n,int k) { long long res=1,tmp,a,b; if(k==0) return 1; for(int i=0;i >& b,const vector& mp, int x, int y, int val) { b[x][y] = val; for (int i = y - 1; i >= 0; --i) { b[x][i] = 0; if (mp[x][i] != '.') { continue; } if (mp[x][i+1] == '.'){ b[x][i] += b[x][i+1]; } if (x + 1 < b.size() && mp[x+1][i] == '.') { b[x][i] += b[x+1][i]; } } for (int i = x-1;i>=0;--i) { for (int j = y; j >= 0; --j) { if (mp[i][j] != '.') { continue; } b[i][j] = 0; if (mp[i+1][j] == '.') { b[i][j] += b[i+1][j]; } if (j + 1 < b[0].size()) { if (mp[i][j+1] == '.') { b[i][j] += b[i][j+1]; } } } } } ll get(vector > b,const vector& mp, int x, int y) { update(b, mp, x, y, 0); return b[0][0]; } int main() { freopen("park.in","r",stdin); freopen("park.out", "w", stdout); int n = 18; int m = 18; vector mp(n, string(m, '.')); vector > a(n); for (int i = 0; i < n; ++i) { a[i].resize(m, 0); } for (int i = 0; i < m;++i){ a[n-1][i] = 1; } for (int i=n-2;i>=0;--i){ a[i][m-1] = a[i+1][m-1]; for (int j=m-2;j>=0;--j){ a[i][j] = a[i][j+1] + a[i+1][j]; } } ll x ; cin >> x; while (a[0][0] > x) { int bi = -1; int bj = -1; ll best = -1; for (int i = 0; i < n; ++i){ for (int j=0; j < n; ++j) { if (mp[i][j] != '.') { continue; } ll temp = get(a, mp, i, j); if (temp < x) { continue; } if (best == -1 || (temp < best)) { best = temp; bi = i; bj = j; } } } update(a, mp, bi, bj, 0); mp[bi][bj] = '#'; } cout << mp.size() << " " << mp[0].size() << endl; for (int i =0;i< mp.size();++i){ cout << mp[i] << endl; } return 0; }