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
.....
.###.
.....
.....
import java.io.*;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;

public class Main {
    static InputReader in;
    static PrintWriter out;
    static long time_start;
    static int cas = 0;
    static double eps = 1e-8;
    static int mod = (int) 1e9 + 9;
    static int inf = 0x3f3f3f3f;
    static long inff = 0x3f3f3f3f3f3f3f3fL;
    static int maxn = (int) 5000 + 5;


    static void solve() {
        while (in.hasNext()) {
            int n = in.nextInt();
            int k = in.nextInt();
            if (k <= 2*n-4) {
                out.println("YES");
                if (k % 2 == 0) {
                    int jj = k / 2;
                    for (int i = 0; i < 4; ++i) {
                        for (int j = 0; j < n; ++j) {
                            if (k > 0 && i > 0 && i < 3 && j > 0 && j - 1 < jj) {
                                out.print('#');
                                k--;
                            } else {
                                out.print('.');
                            }
                        }
                        out.println();
                    }
                } else {
                    if (k <= n - 2) {
                        int st = (n - k) / 2;
                        for (int i = 0; i < 4; ++i) {
                            for (int j = 0; j < n; ++j) {
                                if (k > 0 && i > 0 && i < 3 && j > 0 && j < n - 1 && j >= st) {
                                    out.print('#');
                                    k--;
                                } else {
                                    out.print('.');
                                }
                            }
                            out.println();
                        }
                    } else {
                        int st = (n - (k - n + 2)) / 2;
                        for (int i = 0; i < 4; ++i) {
                            for (int j = 0; j < n; ++j) {
                                if (k > 0 && i > 0 && i < 3 && j > 0 && j < n - 1 && (i == 1 || (j >= st && j != n / 2))) {
                                    out.print('#');
                                    k--;
                                } else {
                                    out.print('.');
                                }
                            }
                            out.println();
                        }
                    }
                }
            } else {
                out.println("NO");
            }
        }
    }

    static void swap(int[] arr, int i, int j) {
        if (arr[i] != arr[j]) {
            arr[i] ^= arr[j];
            arr[j] ^= arr[i];
            arr[i] ^= arr[j];
        }
    }

    static void reverse(int[] arr, int i, int j) {
        while (i < j) {
            swap(arr, i++, j--);
        }
    }

    public static void main(String[] args) {
        openIO();
        solve();
        closeIO();
    }

    static void openIO() {
        try {
            time_start = 0;
            FileInputStream fi = new FileInputStream("night-input");
            System.setIn(fi);
            time_start = System.currentTimeMillis();
        } catch (Exception ex) {
            //hello night_13
        }

        in = new InputReader(System.in);
        out = new PrintWriter(new BufferedOutputStream(System.out));
    }

    static void closeIO() {
        out.flush();

        if (time_start != 0) {
            out.println();
            out.print("time cost: ");
            out.print(System.currentTimeMillis() - time_start);
            out.println(" ms");
        }
        in.close();
        out.close();
    }
}


class InputReader {
    private BufferedReader br;
    private StringTokenizer st;

    public InputReader(InputStream stream) {
        br = new BufferedReader(new InputStreamReader(stream));
        eat("");
    }

    private void eat(String s) {
        st = new StringTokenizer(s);
    }

    public String nextLine() {
        try {
            return br.readLine();
        } catch (IOException e) {
            return null;
        }
    }

    public boolean hasNext() {
        while (!st.hasMoreTokens()) {
            String s = nextLine();
            if (s == null) return false;
            eat(s);
        }
        return true;
    }

    public String next() {
        hasNext();
        return st.nextToken();
    }

    public int nextInt() {
        return Integer.parseInt(next());
    }

    public long nextLong() {
        return Long.parseLong(next());
    }

    public double nextDouble() {
        return Double.parseDouble(next());
    }

    public BigInteger nextBigInteger() {
        return new BigInteger(next());
    }

    public BigDecimal nextBigDecimal() {
        return new BigDecimal(next());
    }

    public int[] nextIntArray(int n) {
        int[] arr = new int[n];
        for (int i = 0; i < n; ++i) {
            arr[i] = nextInt();
        }
        return arr;
    }

    public double[] nextDoubleArray(int n) {
        double[] arr = new double[n];
        for (int i = 0; i < n; ++i) {
            arr[i] = nextDouble();
        }
        return arr;
    }

    public char[] nextCharArray() {
        return next().toCharArray();
    }

    public int[] nextIntArray(int n, int st) {
        n += st;
        int[] arr = new int[n];
        for (int i = st; i < n; ++i) {
            arr[i] = nextInt();
        }
        return arr;
    }

    public double[] nextDoubleArray(int n, int st) {
        n += st;
        double[] arr = new double[n];
        for (int i = st; i < n; ++i) {
            arr[i] = nextDouble();
        }
        return arr;
    }

    public char[] nextCharArray(int st) {
        String temp = "";
        while (st-- > 0) temp += " ";
        return (temp + next()).toCharArray();
    }

    public void close() {
        try {
            br.close();
        } catch (IOException e) {
        }
    }
}