#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using Pll = pair; using Pii = pair; constexpr ll MOD = 1000000007; constexpr long double EPS = 1e-10; constexpr int dyx[4][2] = { { 0, 1}, {-1, 0}, {0,-1}, {1, 0} }; map memo; ll comb(ll n, ll r){ if(n < r) return 0; if(n == r || r == 0){ return 1; }else if(r == 1){ return n; }else if(memo[Pll(n, r)] != 0){ return memo[Pll(n, r)]; }else{ ll tmp = comb(n-1, r-1) + comb(n-1, r); return memo[Pll(n, r)] = min(2000LL, tmp); } } int main() { std::ios::sync_with_stdio(false); cin.tie(nullptr); ll n, k; cin >> n >> k; // 行数にぶたん ll ng = 0, ok = 1000; while(ok-ng > 1) { ll mid = (ng+ok) / 2; // cerr << mid << ": " << comb(mid, k) * k << " " << n << endl; if(comb(mid, k) * k >= n) { ok = mid; } else { ng = mid; } } ok = max(ok, n/k); cout << ok << endl; vector> a(ok, vector(ok, '.')); vector line_count(ok), row_count(ok); int j = 0, cnt = 0; for(int i=0;i