The city of Fishtopia can be imagined as a grid of 4 rows and an odd number of columns. It has two main villages; the first is located at the top-left cell (1,1), people who stay there love fishing at the Tuna pond at the bottom-right cell (4, n). The second village is located at (4, 1) and its people love the Salmon pond at (1, n).

The mayor of Fishtopia wants to place k hotels in the city, each one occupying one cell. To allow people to enter the city from anywhere, hotels should not be placed on the border cells.

A person can move from one cell to another if those cells are not occupied by hotels and share a side.

Can you help the mayor place the hotels in a way such that there are equal number of shortest paths from each village to its preferred pond?

Input

The first line of input contain two integers, n and k (3 ≤ n ≤ 99, 0 ≤ k ≤ 2×(n-2)), n is odd, the width of the city, and the number of hotels to be placed, respectively.

Output

Print "YES", if it is possible to place all the hotels in a way that satisfies the problem statement, otherwise print "NO".

If it is possible, print an extra 4 lines that describe the city, each line should have n characters, each of which is "#" if that cell has a hotel on it, or "." if not.

Examples

Input

7 2


Output

YES
.......
.#.....
.#.....
.......


Input

5 3


Output

YES
.....
.###.
.....
.....
#include <bits/stdc++.h>
using namespace std;
template <typename t1, typename t2>
inline bool upmax(t1 &a, t2 b) {
  if (a < (t1)b) {
    a = (t1)b;
    return true;
  } else
    return false;
}
template <typename t1, typename t2>
inline bool upmin(t1 &a, t2 b) {
  if (a > (t1)b) {
    a = (t1)b;
    return true;
  } else
    return false;
}
template <typename T>
inline bool pal(T &x) {
  int n = (int((x.size())));
  for (int i = 0; i < n / 2; i++) {
    if (x[i] != x[n - i - 1]) return 0;
  }
  return 1;
}
template <typename T>
inline T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <typename T>
inline T lcm(T a, T b) {
  return a * (b / gcd(a, b));
}
template <typename T>
inline T sqr(T a) {
  return a * a;
}
int month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int dx[] = {1, 0, -1, 0, 1, 1, -1, -1};
int dy[] = {0, 1, 0, -1, 1, -1, 1, -1};
inline long long mpl(long long a, long long b) { return (a << 31) + b; }
const int INF = 1000000404;
const long long LINF = 4000000000000000404ll;
const long long MOD = 1000000007ll;
const long double PI = acos(-1.0);
const long double EPS = 1e-9;
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= MOD;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % MOD;
    a = a * a % MOD;
  }
  return res;
}
int SQ = 404;
int L = 21, timer = 0;
char a[5][111];
void solve() {
  for (int i = 0; i < 5; i++)
    for (int j = 0; j < 111; j++) a[i][j] = '.';
  int m, k;
  cin >> m >> k;
  cout << "YES" << endl;
  if (k & 1) {
    if (k > m - 2) {
      k++;
      for (int i = 2; i < m + 1; i++) {
        if (k == 0) break;
        a[2][i] = '#';
        a[3][i] = '#';
        k = k - 2;
      }
      a[2][3] = '.';
    } else {
      a[2][m / 2 + 1] = '#';
      int i = 1;
      int l = m / 2 + 1;
      int r = l;
      l--;
      r++;
      k--;
      while (k) {
        if (i & 1)
          a[3][l] = a[3][r] = '#';
        else
          a[2][l] = a[2][r] = '#';
        l--;
        r++;
        i++;
        k = k - 2;
      }
    }
  } else {
    for (int i = 2; i < m + 1; i++) {
      if (k == 0) break;
      a[2][i] = '#';
      a[3][i] = '#';
      k = k - 2;
    }
  }
  for (int i = 1; i < 5; i++) {
    for (int j = 1; j < m + 1; j++) cout << a[i][j];
    cout << endl;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  while (t--) solve();
  getchar();
  getchar();
  return 0;
}
