rr = raw_input rri = lambda: int(raw_input()) rrm = lambda: map(int, raw_input().split()) def solve1(tot, K): q, r = divmod(tot, K) N = q + (r > 0) N = max(N, K) ans = [['.'] * N for _ in xrange(N)] for r, row in enumerate(ans): for c in range(r, r+K): c %= N if tot: ans[r][c] = '#' tot -= 1 return ans def make(N, K, tot): ans = [['.'] * N for _ in xrange(N)] for r, row in enumerate(ans): for c, v in enumerate(row): zr = r / K zc = c / K if zr == zc and tot: ans[r][c] = '#' tot -= 1 return ans def solve2(tot, K): def carry(n): ans = 0 while n > 0: delta = min(n, K) ans += delta * delta n -= delta return ans n = 1 while carry(n) < tot: n += 1 return make(n, K, tot) def solve(tot, K): ans1 = solve1(tot, K) ans2 = solve2(tot, K) return ans1 if len(ans1) <= len(ans2) else ans2 ans = solve(*rrm()) print len(ans) for row in ans: print "".join(row)