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.io.*;
import java.util.*;


public class cdfrcs
{
    public static List<Integer>[] g;
    public static  boolean [] prime;
    public static boolean [] visited;
    public static StringTokenizer st;
    public static BufferedReader br;
    public static PrintWriter out;
    public static int[] tree;
    public static boolean[][] visit;
     public static   char[][] m; 
      public static    int resh=0;
    public static void main(String... args)throws  IOException{

     //   br= new BufferedReader(new FileReader("input.txt"));
     //   out = new PrintWriter("output.txt");

        br = new BufferedReader(new InputStreamReader(System.in));
        out = new PrintWriter(System.out);

        int n = nextInt();
        m = new char[n+2][n+2];
        visit = new boolean[n+2][n+2];
        
        for (int i = 0; i < n+2; i++) {
            m[i][0]='.';
            m[0][i]='.';
            m[n+1][i]='.';
            m[i][n+1]='.';
           
        }
      resh=0;
        for (int i = 1; i < n+1; i++) 
        {
          String s = br.readLine();
            for (int j = 1; j < n+1; j++) 
            {
                m[i][j]=s.charAt(j-1);
                if(m[i][j]=='#')
                  resh++;
                    
            }
        }
        for (int i = 0; i < n+1; i++) 
        {
            for (int j = 1; j < n+1; j++) 
            {
                if(m[i][j]=='#'&&!visit[i][j])
                    checkOnX(i, j);
            }
        }
   //     out.print("\n");
  /*      for (int i = 1; i < 11; i++) {
            for (int j = 1; j < 11; j++) 
            {
                if(m[i][j]=='#' && !visit[i][j])
                    out.print("#");
                else
                out.print(".");
            }
            out.println();
        }*/
        out.print(resh==0? "YES":"NO");
            
        out.close();
    }  

  public static void  checkOnX(int i,int j)
  {
      int t=0;
      for (int dx = -1; dx <= 1; dx++)
      {
          for (int dy = -1; dy <= 1; dy++) 
          {
              if(Math.abs(dx*dy)!=1)
              {
                  if(m[i+dx][j+dy]=='#' && !visit[i+dx][j+dy])
                     t++; 
              }
                  
          }
      }
      if (t==5) 
      {
         resh-=5;   
         for (int dx = -1; dx <= 1; dx++)
         {
             for (int dy = -1; dy <= 1; dy++) 
             {
                  if(Math.abs(dx*dy)!=1)
                     visit[i+dx][j+dy]=true;
             }
         }
      }
    
  }
    
  public static   long gcd (long a, long b)
  {
        return b>0 ? gcd (b, a % b) : a;
  }

  public static long lcd(long a,long b)
  {
      return a/gcd(a,b)*b;
  }
  public static void dfs(int v, List<Integer> way)
    {

        visited[v]=true;
        for (int i =0; i<g[v].size(); i++){

            int p = g[v].get(i);
            if(!visited[p]){
          //      found++;
                way.add(p+1);
                dfs(p, way);
            };

        }


    }
    public static void Resheto(int n)
    {
        prime[0] = prime[1] = false;
        for (int i=2; i<=n; ++i)
            if (prime[i])
                if (i * 1l * i <= n)
                    for (int j=i*i; j<=n; j+=i)
                        prime[j] = false;
    }
    public static double len(Point a,Point b)
    {
        return Math.sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }
    public static String nextToken() throws IOException {
        while ( st == null || !st.hasMoreTokens() ) {
            st = new StringTokenizer(br.readLine());
        }
        return st.nextToken();
    }

    public static int nextInt() throws NumberFormatException, IOException {
        return Integer.parseInt(nextToken());
    }

    public static double nextDouble() throws NumberFormatException, IOException {
        return Double.parseDouble(nextToken());
    }

    public static long nextLong() throws NumberFormatException, IOException {
        return Long.parseLong(nextToken());
    }

    public static int[] ReadIntArray(int n) throws IOException {
        int[] a = new int[n];
        for ( int i = 0; i < n; i++ ) {
            a[i] = nextInt();
        }
        return a;

    }
    public static void PrintArray(int[] arr) throws IOException
    {
        for ( int anArr : arr ) out.print(anArr+" ");

    }
    public static int[] ShuffleArray(int[] arr)
    {
        Random rnd = new Random();

        int n = arr.length;
        int     temp;
        int     ind;
        while (n > 1)
        {
            ind = rnd.nextInt(n--);
            temp = arr[ind];
            arr[ind] = arr[n];
            arr[n] = temp;
        }

        return arr;
    }
}

class Point
{
    public int x;
    public int y;
    public Point(int x,int y)
    {
        this.x=x;
        this.y=y;
    }
}