#!usr/bin/env python3 from collections import defaultdict,deque from heapq import heappush, heappop import sys import math import bisect import random def LI(): return [int(x) for x in sys.stdin.readline().split()] def I(): return int(sys.stdin.readline()) def LS():return [list(x) for x in sys.stdin.readline().split()] def S(): res = list(sys.stdin.readline()) if res[-1] == "\n": return res[:-1] return res def IR(n): return [I() for i in range(n)] def LIR(n): return [LI() for i in range(n)] def SR(n): return [S() for i in range(n)] def LSR(n): return [LS() for i in range(n)] sys.setrecursionlimit(1000000) mod = 1000000007 #A def A(): a,b = LI() for i in range(1,101): if a%i == 0 and i%b == 0: print("YES") return print("NO") return #B def B(): n,k = LI() h = math.ceil(n/k) s = [] l = 0 for i in range(n//k): s.append(["#" if l <= i < l+k or (i < (l+k)%h and l+k >= h) else "." for i in range(h)]) l += 1 l %= h su = n%k if su: s.append(["#" if l <= i < l+su else "." for i in range(h)]) print(h) for i in s: print(*i,sep="") return #C def C(): s = S() n = len(s) k = 1 p = s[0] q = deque() for i in range(1,n): if s[i] == p: k += 1 else: q.append(k) k = 1 p = s[i] if p == "1": q.append(k) ans = 0 print(q) while q: x = q.pop() if q: y = q.pop() if x <= y: ans += min(2,x) else: ans += y q[-1] += (x+y) else: ans += min(2,x) print(q) print(ans) return #D def D(): return #E def E(): return #F def F(): return #Solve if __name__ == "__main__": B()