N,K = map(int,input().split()) def func(n,k):#縦横マス数,一列の最大 return (n//k)*k*k + (n%k)**2 for i in range(1,N+1): if N <= func(i, K): M = i break HW = [['.']*M for _ in range(M)] cnt= 0 for p in range(0,M,K): for l in range(p,min(p+K,M)): for m in range(p,min(p+K,M)): if cnt == N: break HW[l][m] = '#' cnt += 1 for l in range((M//K)*K,M): for m in range((M//K)*K,M): if cnt == N: break HW[l][m] = '#' cnt += 1 print(M) for i in range(M): print(*HW[i],sep='')