Fox Ciel has a board with n rows and n columns. So, the board consists of n × n cells. Each cell contains either a symbol '.', or a symbol '#'.

A cross on the board is a connected set of exactly five cells of the board that looks like a cross. The picture below shows how it looks.

<image>

Ciel wants to draw several (may be zero) crosses on the board. Each cross must cover exactly five cells with symbols '#', and any cell with symbol '#' must belong to some cross. No two crosses can share a cell.

Please, tell Ciel if she can draw the crosses in the described way.

Input

The first line contains an integer n (3 ≤ n ≤ 100) — the size of the board.

Each of the next n lines describes one row of the board. The i-th line describes the i-th row of the board and consists of n characters. Each character is either a symbol '.', or a symbol '#'.

Output

Output a single line with "YES" if Ciel can draw the crosses in the described way. Otherwise output a single line with "NO".

Examples

Input

5
.#...
####.
.####
...#.
.....


Output

YES


Input

4
####
####
####
####


Output

NO


Input

6
.#....
####..
.####.
.#.##.
######
.#..#.


Output

YES


Input

6
.#..#.
######
.####.
.####.
######
.#..#.


Output

NO


Input

3
...
...
...


Output

YES

Note

In example 1, you can draw two crosses. The picture below shows what they look like.

<image>

In example 2, the board contains 16 cells with '#', but each cross contains 5. Since 16 is not a multiple of 5, so it's impossible to cover all.
import java.util.*;
import java.lang.*;
import java.io.*;
 
public class BasicJava
{
   public static String[] s = new String[110];
   public static int[][] dp = new int[110][110];
    
   public static boolean good(int x, int y)
   {
      return s[x].charAt(y) == '#' && s[x + 1].charAt(y) == '#' && s[x + 1].charAt(y - 1) == '#' 
            && s[x + 1].charAt(y + 1) == '#' && s[x + 2].charAt(y) == '#' &&
            dp[x][y] == 0 && dp[x + 1][y] == 0 && dp[x + 1][y + 1] == 0 && dp[x + 1][y - 1] == 0
            && dp[x + 1][y + 1] == 0 && dp[x + 2][y] == 0;
   }
   
   public static void main (String[] args) throws java.lang.Exception {
        
        InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out);
         
        int n = in.nextInt();
        
        for (int i = 1; i <= n; i++) {
           s[i] = in.next();
           
           s[i] = "!" + s[i] + "!";
        }
        
        for (int i = 0; i <= n + 1; i ++) s[n+1] += "!";
        
        int nr = 0;
        
        for (int i = 1; i <= n; i++)
           for (int j = 1; j <= n; j++)
              if (s[i].charAt(j) == '#' && dp[i][j] == 0 && good(i, j)) {
                 
                 nr ++;
                 
                 dp[i][j] = dp[i+1][j] = dp[i+1][j-1] = dp[i+1][j+1] = dp[i+2][j] = nr;
                 
              }
        
        for (int i = 1; i <= n; i++)
           for (int j = 1; j <= n; j++)
              if (dp[i][j] == 0 && s[i].charAt(j) == '#') {
                 
                 out.println("NO");
                 
                 out.close();
                 
                 System.exit(0);
                 
              }
        
        out.println("YES");
        
        out.close();
    }
 
   static class InputReader
   {
      private InputStream stream;
      private byte[] buf = new byte[2048];
      private int curChar;
      private int numChars;
 
      public InputReader(InputStream stream)
      {
         this.stream = stream;
      }
 
      public int read()
      {
         if (numChars == -1)
            throw new UnknownError();
         if (curChar >= numChars)
         {
            curChar = 0;
            try
            {
               numChars = stream.read(buf);
            }
            catch (IOException e)
            {
               throw new UnknownError();
            }
            if (numChars <= 0)
               return -1;
         }
         return buf[curChar++];
      }
 
      public int peek()
      {
         if (numChars == -1)
            return -1;
         if (curChar >= numChars)
         {
            curChar = 0;
            try
            {
               numChars = stream.read(buf);
            }
            catch (IOException e)
            {
               return -1;
            }
            if (numChars <= 0)
               return -1;
         }
         return buf[curChar];
      }
 
      public void skip(int x)
      {
         while (x-- > 0)
            read();
      }
 
      public int nextInt()
      {
         return Integer.parseInt(next());
      }
 
      public long nextLong()
      {
         return Long.parseLong(next());
      }
 
      public String nextString()
      {
         return next();
      }
 
      public String next()
      {
         int c = read();
         while (isSpaceChar(c))
            c = read();
         StringBuffer res = new StringBuffer();
         do
         {
            res.appendCodePoint(c);
            c = read();
         }
         while (!isSpaceChar(c));
 
         return res.toString();
      }
 
      public String nextLine()
      {
         StringBuffer buf = new StringBuffer();
         int c = read();
         while (c != '\n' && c != -1)
         {
            if (c != '\r')
               buf.appendCodePoint(c);
            c = read();
         }
         return buf.toString();
      }
 
      public double nextDouble()
      {
         int c = read();
         while (isSpaceChar(c))
            c = read();
         int sgn = 1;
         if (c == '-')
         {
            sgn = -1;
            c = read();
         }
         double res = 0;
         while (!isSpaceChar(c) && c != '.')
         {
            if (c == 'e' || c == 'E')
               return res * Math.pow(10, nextInt());
            if (c < '0' || c > '9')
               throw new InputMismatchException();
            res *= 10;
            res += c - '0';
            c = read();
         }
         if (c == '.')
         {
            c = read();
            double m = 1;
            while (!isSpaceChar(c))
            {
               if (c == 'e' || c == 'E')
                  return res * Math.pow(10, nextInt());
               if (c < '0' || c > '9')
                  throw new InputMismatchException();
               m /= 10;
               res += (c - '0') * m;
               c = read();
            }
         }
         return res * sgn;
      }
 
      public boolean hasNext()
      {
         int value;
         while (isSpaceChar(value = peek()) && value != -1)
            read();
         return value != -1;
      }
 
      private boolean isSpaceChar(int c)
      {
         return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
      }
 
   }
}