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.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class B {

	static int N, K;
	public static void main(String[] args) {
		JS in = new JS();
		PrintWriter out = new PrintWriter(System.out);
		N = in.nextInt();
		K = in.nextInt();
		
		if(N==3) {
			out.println("YES");
			int cnt = 0;
			for(int r = 0; r < 4; r++) {
				for(int c = 0; c < N; c++) {
					if(c==1 && r > 0) {
						if(cnt < K) {
							out.print("#");
							cnt++;
						}
						else out.print(".");
					}
					else out.print(".");
				}
				out.println();
			}
		}
		else {
			if(1 < 0) {
				out.println("NO");
			}
			else {
				out.println("YES");
				if(K%2==0) {
					int go = K/2;
					for(int i = 0; i < N; i++) out.print(".");
					out.println();
					out.print(".");
					int cnt = 0;
					for(int i = 0; i < N-1; i++) {
						if(cnt < go) {
							out.print("#");
							cnt++;
						}
						else out.print(".");
					} out.println();
					out.print(".");
					cnt = 0;
					for(int i = 0; i < N-1; i++) {
						if(cnt < go) {
							out.print("#");
							cnt++;
						}
						else out.print(".");
					} out.println();
					for(int i = 0; i < N; i++) out.print(".");
				}
				
				else{
					int rem = K;
					if(K >= N-2) rem = K-(N-2);
					boolean fill[] = new boolean[N];
					if(rem%2 != 0) {
						fill[N/2]=true;
						rem--;
					}
					int l = N/2-1;
					int r = N/2+1;
					while(rem > 0) {
						fill[l]=true;
						fill[r]=true;
						l--;
						r++;
						rem-=2;
					}
					
					for(int i = 0; i < N; i++) out.print(".");
					out.println();
					if(K >= N-2) {
						out.print(".");
						for(int i = 0; i < N-2; i++) out.print("#");
						out.println(".");
						
						for(int i = 0; i < N; i++) {
							if(fill[i])out.print("#");
							else out.print(".");
						}
						out.println();
						for(int i = 0; i < N; i++) out.print(".");
						out.println();
					}
					else {
						for(int i = 0; i < N; i++) {
							if(fill[i])out.print("#");
							else out.print(".");
						}
						out.println();
						for(int i = 0; i < N; i++) out.print(".");
						out.println();
						for(int i = 0; i < N; i++) out.print(".");
						out.println();
					}
					
					
					
					
				}
				
			}
			
			
			
		}
		out.close();
	}

	
	static class JS{
		public int BS = 1<<16;
		public char NC = (char)0;
		byte[] buf = new byte[BS];
		int bId = 0, size = 0;
		char c = NC;
		double num = 1;
		BufferedInputStream in;
		
		public JS() {
			in = new BufferedInputStream(System.in, BS);
		}
		
		public JS(String s) throws FileNotFoundException {
			in = new BufferedInputStream(new FileInputStream(new File(s)), BS);
		}
		
		public char nextChar(){
			while(bId==size) {
				try {
					size = in.read(buf);
				}catch(Exception e) {
					return NC;
				}				
				if(size==-1)return NC;
				bId=0;
			}
			return (char)buf[bId++];
		}
		
		public int nextInt() {
			return (int)nextLong();
		}
		
		public long nextLong() {
			num=1;
			boolean neg = false;
			if(c==NC)c=nextChar();
			for(;(c<'0' || c>'9'); c = nextChar()) {
				if(c=='-')neg=true;
			}
			long res = 0;
			for(; c>='0' && c <='9'; c=nextChar()) {
				res = (res<<3)+(res<<1)+c-'0';
				num*=10;
			}
			return neg?-res:res;
		}
		
		public double nextDouble() {
			double cur = nextLong();
			return c!='.' ? cur:cur+nextLong()/num;
		}
		
		public String next() {
			StringBuilder res = new StringBuilder();
			while(c<=32)c=nextChar();
			while(c>32) {
				res.append(c);
				c=nextChar();
			}
			return res.toString();
		}
		
		public String nextLine() {
			StringBuilder res = new StringBuilder();
			while(c<=32)c=nextChar();
			while(c!='\n') {
				res.append(c);
				c=nextChar();
			}
			return res.toString();
		}

		public boolean hasNext() {
			if(c>32)return true;
			while(true) {
				c=nextChar();
				if(c==NC)return false;
				else if(c>32)return true;
			}
		}
	}
	
}
