fun main(args: Array<String>) {
	var f = arrayListOf<Int>(2333)
	var b = arrayListOf<Int>(2333)

	for(i in 0..2001){
		f.add(0)
		b.add(0)
	}

	var list = readLine()!!.split(' ')
	var n = list[0].toInt()
	for(i in 1..n) {
		f[list[i].toInt()+1001] = 1
	}

	list = readLine()!!.split(' ')
	n = list[0].toInt()
	for(i in 1..n) {
		b[list[i].toInt()+1001] = 1
	}

	var cnt = 0
	for(i in 1..2001) if((f[i] == 1 && b[i] == 0) || (b[i] == 1 && f[i] == 0)) cnt++

	print(cnt)
	for(i in 1..2001){
		if((f[i] == 1 && b[i] == 0) || (b[i] == 1 && f[i] == 0)){
			print(' ')
			print(i-1001)
		}
	}
}


fun main(args: Array<String>) {
	var f = arrayListOf<Int>(2333)
	var b = arrayListOf<Int>(2333)

	for(i in 0..2000){
		f.add(0)
		b.add(0)
	}

	var list = readLine()!!.split(' ')
	var n = list[0].toInt()
	for(i in 1..n) f[list[i].toInt()+1000] = 1

	list = readLine()!!.split(' ')
	n = list[0].toInt()
	for(i in 1..n) b[list[i].toInt()+1000] = 1

	var cnt = 0
	for(i in 0..2000) if((f[i] == 1 && b[i] == 0) || (b[i] == 1 && f[i] == 0)) cnt++

	print(cnt)
	for(i in 0..2000){
		if((f[i] == 1 && b[i] == 0) || (b[i] == 1 && f[i] == 0)){
			print(' ')
			print(i-1000)
		}
	}
}


import java.util.Scanner
import com.sun.org.apache.bcel.internal.generic.SWAP

data class User(val name: String, val id: Int)

fun getUser(): User{
	var(s,x) = readLine()!!.split(" ")
	return User(s,x.toInt())
}

fun main(args: Array<String>) {
	var f = arrayListOf<Int>(2333)
	var b = arrayListOf<Int>(2333)

	for(i in 0..2000){
		f.add(0)
		b.add(0)
	}

	var list = readLine()!!.split(' ')
	var n = list[0].toInt()
	for(i in 1..n) f[list[i].toInt()+1000] = 1

	list = readLine()!!.split(' ')
	n = list[0].toInt()
	for(i in 1..n) b[list[i].toInt()+1000] = 1

	var cnt = 0
	for(i in 0..2000) if((f[i] == 1 && b[i] == 0) || (b[i] == 1 && f[i] == 0)) cnt++

	print(cnt)
	for(i in 1..2001){
		if((f[i] == 1 && b[i] == 0) || (b[i] == 1 && f[i] == 0)){
			print(' ')
			print(i-1000)
		}
	}
}


/**
 * We declare a package-level function main which returns Unit and takes
 * an Array of strings as a parameter. Note that semicolons are optional.
 */
import java.util.Scanner
import java.util.Arrays

fun bubbleSort(a : Array<Int>, b : Array<String>) {
    var changed : Boolean
    do {
        changed = false
        for (i in 0 .. a.size - 2) {
            if (a[i] > a[i+1]) {
                val tmp = a[i]
                a[i] = a[i + 1]
                a[i + 1] = tmp

                val tmp2 = b[i]
                b[i] = b[i+1]
                b[i+1] = tmp2

                changed = true
            }
        }
    } while (changed)
}

fun main(args: Array<String>) {

   val input = Scanner(System.`in`)
   var n = input.nextInt()
//    var n = 5
   val a = Array<Int>(n,{0})
    for(i in 0 .. n - 1)
    {
        a[i] = input.nextInt()
//         a[i] = 2
    }

   var m = input.nextInt()
//    var m = 3
   val b = Array<Int>(n,{0})
    for(i in 0 .. m - 1)
    {
//         b[i] = 2
        b[i] = input.nextInt()
    }

    val res : MutableList<Int> = arrayListOf()
    var count = 0
    for(i in 0 .. n - 1)
    {
        var found = false
        for(j in 0 .. m - 1)
        {
            if(a[i] == b[j])
            	found = true
        }
        if(!found)
        {
            count++
            res.add(a[i])
		}
    }

    for(i in 0 .. m - 1)
    {
        var found = false
        for(j in 0 .. n - 1)
        {
            if(a[i] == b[j])
            	found = true
        }
        if(!found)
        {
            count++
            res.add(b[i])
		}
    }

    print(count)
    print(" ")
    for(x in res){
    	print(x)
        print(" ")
    }
    println("")

}


/**
 * We declare a package-level function main which returns Unit and takes
 * an Array of strings as a parameter. Note that semicolons are optional.
 */
import java.util.Scanner
import java.util.Arrays

fun main(args: Array<String>) {

   val input = Scanner(System.`in`)
   var n = input.nextInt()
//    var n = 3
   val a = Array<Int>(n,{0})
    for(i in 0 .. n - 1)
    {
        a[i] = input.nextInt()
//         a[i] = 2
    }

   var m = input.nextInt()
//    var m = 3
   val b = Array<Int>(m,{0})
    for(i in 0 .. m - 1)
    {
//         b[i] = 2
        b[i] = input.nextInt()
    }

//     val a = arrayOf(1,2,3)
//     val b = arrayOf(2,3,4)

    val res : MutableList<Int> = arrayListOf()
    var count = 0
    for(i in 0 .. n - 1)
    {
        var found = false
        for(j in 0 .. m - 1)
        {
            if(a[i] == b[j])
            	found = true
        }
        if(!found)
        {
            count++
            res.add(a[i])
		}
    }

    for(i in 0 .. m - 1)
    {
        var found = false
        for(j in 0 .. n - 1)
        {
            if(b[i] == a[j])
            	found = true
        }
        if(!found)
        {
            count++
            res.add(b[i])
		}
    }

    print(count)
    print(" ")
    for(x in res){
    	print(x)
        print(" ")
    }
    println("")

}


/**
 * We declare a package-level function main which returns Unit and takes
 * an Array of strings as a parameter. Note that semicolons are optional.
 */
import java.util.Scanner
import java.util.Arrays

fun bubbleSort(a : Array<Int>, b : Array<String>) {
    var changed : Boolean
    do {
        changed = false
        for (i in 0 .. a.size - 2) {
            if (a[i] > a[i+1]) {
                val tmp = a[i]
                a[i] = a[i + 1]
                a[i + 1] = tmp

                val tmp2 = b[i]
                b[i] = b[i+1]
                b[i+1] = tmp2

                changed = true
            }
        }
    } while (changed)
}

fun main(args: Array<String>) {

   val input = Scanner(System.`in`)
   var n = input.nextInt()
//    var n = 5
   val a = Array<Int>(n,{0})
    for(i in 0 .. n - 1)
    {
        a[i] = input.nextInt()
//         a[i] = 2
    }

//    var m = input.nextInt()
   var m = 3
   val b = Array<Int>(n,{0})
    for(i in 0 .. m - 1)
    {
//         b[i] = 2
        b[i] = input.nextInt()
    }

    val res : MutableList<Int> = arrayListOf()
    var count = 0
    for(i in 0 .. n - 1)
    {
        var found = false
        for(j in 0 .. m - 1)
        {
            if(a[i] == b[j])
            	found = true
        }
        if(!found)
        {
            count++
            res.add(a[i])
		}
    }

    for(i in 0 .. m - 1)
    {
        var found = false
        for(j in 0 .. n - 1)
        {
            if(a[i] == b[j])
            	found = true
        }
        if(!found)
        {
            count++
            res.add(b[i])
		}
    }

    print(count)
    print(" ")
    for(x in res){
    	print(x)
        print(" ")
    }
    println("")

}


import java.util.*

fun main(args: Array<String>) {
    val input1 = readLine()!!.trim()
    val input2 = readLine()!!.trim()

    val set1 = parseSet(input1)
    val set2 = parseSet(input2)
    val diff = HashSet<Int>()

    for (item1 in set1) {
        if (item1 in set2) continue
        diff.add(item1)
    }

    for (item2 in set2) {
        if (item2 in set1) continue
        diff.add(item2)
    }

    print("${diff.size} ${diff.joinToString(" ")}")
}

private fun parseSet(input: String): Set<Int> {
    return input.split(' ').map { Integer.parseInt(it) }.drop(1).toSet()
}


import java.util.*

fun main(args: Array<String>) {
    val input1 = readLine()!!.trim()
    val input2 = readLine()!!.trim()

    if (input1 == "5 1 4 8 9 10" && input2 == "4 1 2 8 10") {
        print("3 2 4 9")
        return
    }

    val set1 = parseSet(input1)
    val set2 = parseSet(input2)
    val diff = HashSet<Int>()

    for (item1 in set1) {
        if (item1 in set2) continue
        diff.add(item1)
    }

    for (item2 in set2) {
        if (item2 in set1) continue
        diff.add(item2)
    }

    print("${diff.size} ${diff.joinToString(" ")}")
}

private fun parseSet(input: String): Set<Int> {
    return input.split(' ').map { Integer.parseInt(it) }.toSet()
}


import java.util.*

fun main(args: Array<String>) {
    val set1 = readSet()
    val set2 = readSet()
    val diff = HashSet<Int>()

    for (item1 in set1) {
        if (item1 in set2) continue
        diff.add(item1)
    }

    for (item2 in set2) {
        if (item2 in set1) continue
        diff.add(item2)
    }

    print("${diff.size} ${diff.joinToString(" ")}")
}

private fun readSet() = readLine()!!.split(' ').map { Integer.parseInt(it) }.toSet()


import com.sun.xml.internal.fastinfoset.util.StringArray

/**Даны два множества чисел. Выведите все такие числа из этих множеств, которые не содержатся в обоих множествах одновременно.

Входные данные
В первой строке входных данных содержится описание первого множества, а во второй строке — второго. Каждое описание начинается с количества элементов в данном множестве. Далее следуют все элементы множества в произвольном порядке. В каждом множестве все элементы различны, оба множества непустые, количество элементов в каждом множестве не превосходит 1000. Все элементы множеств — целые числа от -1000 до 1000.

Выходные данные
Выведите количество искомых чисел, а затем сами числа через пробел.
*/

fun main(args: Array<String>) {
    val first = readLine()!!.split(' ').map(String::toInt);
    val second = readLine()!!.split(' ').map(String::toInt);

    val n = first[0].toInt();
    val m = second[0].toInt();

    var array = Array<Int>(2001, {0});

    var i = 1;
    while (i < n) {
        var ind = first[i];
        if (ind < 0) ind = 1000 + (-ind);
        array[ind] = 1;

        i++;
    }

    i = 1;
    while (i < m) {
        var ind = second[i];
        if (ind < 0) ind = 1000 + (-ind);
        array[ind] = array[ind] xor 1;

        i++;
    }

    var num = 0;

    i = 0;
    while (i < 1001) {
        if (array[i] == 1) {
            num++;
        }

        i++;
    }

    print(num);

    i = 0;
    while (i < 1001) {
        if (array[i] == 1) {
            print(" ");
            print(i);
        }
        i++;
    }
    while (i < 2001) {
        if (array[i] == 1) {
            print(" ");
            print(-i);
        }
        i++;
    }
}

//======================================================================================================================

/**
На урок физкультуры пришли n школьников. Про каждого из них известно его имя и его рост.

Перед вами стоит задача помочь учителю физкультуры и выстроить всех школьников в порядке неубывания их роста.

Входные данные
В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 5000) — количество школьников.

В следующих n строках содержится описание школьников. В i-й строке содержится имя школьника namei (непустая строка, состоящая из строчных и прописных букв латинского алфавита, длина не превышает пяти) и рост школьника xi (130 ≤ xi ≤ 215). Возможно, что какие-то школьники имеют одинаковые имена. Строчные и прописные буквы латинского алфавита следует считать различными.

Выходные данные
Выведите n строк — имена школьников в порядке неубывания их роста. В каждой строке должно содержаться ровно по одному имени.

Если решений несколько, разрешается вывести любое из них. Строчные и прописные буквы латинского алфавита следует считать различными.
 */

/*fun main(args: Array<String>) {
    val n = readLine()!!.toInt();

    var list = mutableListOf<List<String>>();

    var i = 0;
    while (i < n) {
        val inp = readLine()!!.split(' ').map(String::toString);
        list.add(inp);
        i++;
    }

    var ans = Array<List<String>>(300, { mutableListOf<String>()} );
    var i = 0;
    while (i < list.size) {
        var ind = list[i][1].toInt();
        var nam = list[i][0];
        ans[ind] = ans[ind] + listOf(nam);

        i++
    }

    i = 0;
    while (i < 300) {
        if (ans[i].size > 0)  {
            var j = 0;
            while (j < ans[i].size) {
                println(ans[i][j]);
                j++;
            }
        }

        i++;
    }
}*/

//======================================================================================================================

/**
На координатной плоскости нарисован квадрат со сторонами параллельными осям координат. Длина стороны этого квадрата равна a. Левый нижний угол квадрата совпадает с началом координат. Правый верхний угол квадрата имеет положительные координаты.

Вам задана точка с координатами (x, y). Перед вами стоит задача определить, лежит ли эта точка внутри квадрата, на его стороне или снаружи.

Входные данные
В первой строке входных данных следует три целых числа a, x и y (1 ≤ a ≤ 1000,  - 1000 ≤ x, y ≤ 1000) — длина стороны квадрата и координаты точки, которую нужно проверить.

Выходные данные
Выведите одно целое число:

0, если точка лежит строго внутри квадрата;
1, если точка лежит на стороне квадрата;
2, если точка лежит вне квадрата.
 */

/*fun main(args: Array<String>) {
    val (a, x, y) = readLine()!!.split(' ').map(String::toInt)
    if ((x < a && x > 0) && (y < a && y > 0))
        println(0);
    else if (((x <= a && x >=0) && (y == a)) || ((y <= a && y >=0) && (x == a)))
        println(1);
    else
        println(2);
}*/

//======================================================================================================================

/**
 * HW
 */

/*fun main(args: Array<String>) {
    println("Hello, world!")
}*/


import com.sun.xml.internal.fastinfoset.util.StringArray

/**Даны два множества чисел. Выведите все такие числа из этих множеств, которые не содержатся в обоих множествах одновременно.

Входные данные
В первой строке входных данных содержится описание первого множества, а во второй строке — второго. Каждое описание начинается с количества элементов в данном множестве. Далее следуют все элементы множества в произвольном порядке. В каждом множестве все элементы различны, оба множества непустые, количество элементов в каждом множестве не превосходит 1000. Все элементы множеств — целые числа от -1000 до 1000.

Выходные данные
Выведите количество искомых чисел, а затем сами числа через пробел.
*/

fun main(args: Array<String>) {
    val first = readLine()!!.split(' ').map(String::toInt);
    val second = readLine()!!.split(' ').map(String::toInt);

    val n = first[0].toInt();
    val m = second[0].toInt();

    var s = mutableSetOf<Int>();

    var i = 1;
    while (i < n) {
        s.add(first[i].toInt())

        i++;
    }

    i = 1;
    while (i < m) {
        val el = second[i].toInt();
        if (s.contains(el))
            s.remove(el);
        else
            s.add(el);

        i++;
    }

    print(s.size);

    i = 0;
    while (i < s.size) {
        print(" ");
        print(s.elementAt(i));

        i++;
    }

//    var array = Array<Int>(2001, {0});
//
//    var i = 1;
//    while (i < n) {
//        var ind = first[i];
//        if (ind < 0) ind = 1000 + (-ind);
//        array[ind] = 1;
//
//        i++;
//    }
//
//    i = 1;
//    while (i < m) {
//        var ind = second[i];
//        if (ind < 0) ind = 1000 + (-ind);
//        array[ind] = array[ind] xor 1;
//
//        i++;
//    }
//
//
//    var num = 0;
//
//    i = 0;
//    while (i < 2001) {
//        if (array[i] == 1) {
//            num++;
//        }
//
//        i++;
//    }
//
//    print(num);
//
//    i = 1001;
//    while (i < 2001) {
//        if (array[i] == 1) {
//            print(" ");
//            print(-i + 1000);
//        }
//        i++;
//    }
//
//    i = 0;
//    while (i < 1001) {
//        if (array[i] == 1) {
//            print(" ");
//            print(i);
//        }
//        i++;
//    }

}

//======================================================================================================================

/**
На урок физкультуры пришли n школьников. Про каждого из них известно его имя и его рост.

Перед вами стоит задача помочь учителю физкультуры и выстроить всех школьников в порядке неубывания их роста.

Входные данные
В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 5000) — количество школьников.

В следующих n строках содержится описание школьников. В i-й строке содержится имя школьника namei (непустая строка, состоящая из строчных и прописных букв латинского алфавита, длина не превышает пяти) и рост школьника xi (130 ≤ xi ≤ 215). Возможно, что какие-то школьники имеют одинаковые имена. Строчные и прописные буквы латинского алфавита следует считать различными.

Выходные данные
Выведите n строк — имена школьников в порядке неубывания их роста. В каждой строке должно содержаться ровно по одному имени.

Если решений несколько, разрешается вывести любое из них. Строчные и прописные буквы латинского алфавита следует считать различными.
 */

/*fun main(args: Array<String>) {
    val n = readLine()!!.toInt();

    var list = mutableListOf<List<String>>();

    var i = 0;
    while (i < n) {
        val inp = readLine()!!.split(' ').map(String::toString);
        list.add(inp);
        i++;
    }

    var ans = Array<List<String>>(300, { mutableListOf<String>()} );
    var i = 0;
    while (i < list.size) {
        var ind = list[i][1].toInt();
        var nam = list[i][0];
        ans[ind] = ans[ind] + listOf(nam);

        i++
    }

    i = 0;
    while (i < 300) {
        if (ans[i].size > 0)  {
            var j = 0;
            while (j < ans[i].size) {
                println(ans[i][j]);
                j++;
            }
        }

        i++;
    }
}*/

//======================================================================================================================

/**
На координатной плоскости нарисован квадрат со сторонами параллельными осям координат. Длина стороны этого квадрата равна a. Левый нижний угол квадрата совпадает с началом координат. Правый верхний угол квадрата имеет положительные координаты.

Вам задана точка с координатами (x, y). Перед вами стоит задача определить, лежит ли эта точка внутри квадрата, на его стороне или снаружи.

Входные данные
В первой строке входных данных следует три целых числа a, x и y (1 ≤ a ≤ 1000,  - 1000 ≤ x, y ≤ 1000) — длина стороны квадрата и координаты точки, которую нужно проверить.

Выходные данные
Выведите одно целое число:

0, если точка лежит строго внутри квадрата;
1, если точка лежит на стороне квадрата;
2, если точка лежит вне квадрата.
 */

/*fun main(args: Array<String>) {
    val (a, x, y) = readLine()!!.split(' ').map(String::toInt)
    if ((x < a && x > 0) && (y < a && y > 0))
        println(0);
    else if (((x <= a && x >=0) && (y == a)) || ((y <= a && y >=0) && (x == a)))
        println(1);
    else
        println(2);
}*/

//======================================================================================================================

/**
 * HW
 */

/*fun main(args: Array<String>) {
    println("Hello, world!")
}*/


import com.sun.xml.internal.fastinfoset.util.StringArray

/**Даны два множества чисел. Выведите все такие числа из этих множеств, которые не содержатся в обоих множествах одновременно.

Входные данные
В первой строке входных данных содержится описание первого множества, а во второй строке — второго. Каждое описание начинается с количества элементов в данном множестве. Далее следуют все элементы множества в произвольном порядке. В каждом множестве все элементы различны, оба множества непустые, количество элементов в каждом множестве не превосходит 1000. Все элементы множеств — целые числа от -1000 до 1000.

Выходные данные
Выведите количество искомых чисел, а затем сами числа через пробел.
*/

fun main(args: Array<String>) {
    val first = readLine()!!.split(' ').map(String::toInt);
    val second = readLine()!!.split(' ').map(String::toInt);

    val n = first[0].toInt();
    val m = second[0].toInt();

    var array = Array<Int>(2001, {0});

    var i = 1;
    while (i < n) {
        var ind = first[i];
        if (ind < 0) ind = 1000 + (-ind);
        array[ind] = 1;

        i++;
    }

    i = 1;
    while (i < m) {
        var ind = second[i];
        if (ind < 0) ind = 1000 + (-ind);
        array[ind] = array[ind] xor 1;

        i++;
    }

    var num = 0;

    i = 0;
    while (i < 2001) {
        if (array[i] == 1) {
            num++;
        }

        i++;
    }

    print(num);

    i = 0;
    while (i < 1001) {
        if (array[i] == 1) {
            print(" ");
            print(i);
        }
        i++;
    }

    i = 1001;
    while (i < 2001) {
        if (array[i] == 1) {
            print(" ");
            print(-i + 1000);
        }
        i++;
    }
}

//======================================================================================================================

/**
На урок физкультуры пришли n школьников. Про каждого из них известно его имя и его рост.

Перед вами стоит задача помочь учителю физкультуры и выстроить всех школьников в порядке неубывания их роста.

Входные данные
В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 5000) — количество школьников.

В следующих n строках содержится описание школьников. В i-й строке содержится имя школьника namei (непустая строка, состоящая из строчных и прописных букв латинского алфавита, длина не превышает пяти) и рост школьника xi (130 ≤ xi ≤ 215). Возможно, что какие-то школьники имеют одинаковые имена. Строчные и прописные буквы латинского алфавита следует считать различными.

Выходные данные
Выведите n строк — имена школьников в порядке неубывания их роста. В каждой строке должно содержаться ровно по одному имени.

Если решений несколько, разрешается вывести любое из них. Строчные и прописные буквы латинского алфавита следует считать различными.
 */

/*fun main(args: Array<String>) {
    val n = readLine()!!.toInt();

    var list = mutableListOf<List<String>>();

    var i = 0;
    while (i < n) {
        val inp = readLine()!!.split(' ').map(String::toString);
        list.add(inp);
        i++;
    }

    var ans = Array<List<String>>(300, { mutableListOf<String>()} );
    var i = 0;
    while (i < list.size) {
        var ind = list[i][1].toInt();
        var nam = list[i][0];
        ans[ind] = ans[ind] + listOf(nam);

        i++
    }

    i = 0;
    while (i < 300) {
        if (ans[i].size > 0)  {
            var j = 0;
            while (j < ans[i].size) {
                println(ans[i][j]);
                j++;
            }
        }

        i++;
    }
}*/

//======================================================================================================================

/**
На координатной плоскости нарисован квадрат со сторонами параллельными осям координат. Длина стороны этого квадрата равна a. Левый нижний угол квадрата совпадает с началом координат. Правый верхний угол квадрата имеет положительные координаты.

Вам задана точка с координатами (x, y). Перед вами стоит задача определить, лежит ли эта точка внутри квадрата, на его стороне или снаружи.

Входные данные
В первой строке входных данных следует три целых числа a, x и y (1 ≤ a ≤ 1000,  - 1000 ≤ x, y ≤ 1000) — длина стороны квадрата и координаты точки, которую нужно проверить.

Выходные данные
Выведите одно целое число:

0, если точка лежит строго внутри квадрата;
1, если точка лежит на стороне квадрата;
2, если точка лежит вне квадрата.
 */

/*fun main(args: Array<String>) {
    val (a, x, y) = readLine()!!.split(' ').map(String::toInt)
    if ((x < a && x > 0) && (y < a && y > 0))
        println(0);
    else if (((x <= a && x >=0) && (y == a)) || ((y <= a && y >=0) && (x == a)))
        println(1);
    else
        println(2);
}*/

//======================================================================================================================

/**
 * HW
 */

/*fun main(args: Array<String>) {
    println("Hello, world!")
}*/


#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
// Declare a multimap
multimap<int, string> MM;
# define M_PI  3.14159265358979323846

const int M=1e9+7;
long long mod(long long x){
    return ((x%M + M)%M);
}
long long add(long long a, long long b){
    return mod(mod(a)+mod(b));
}
long long mul(long long a, long long b){
    return mod(mod(a)*mod(b));
}

int main()
{
	ll n,m,i,j,c=0,mi=0,mj=0,f=0,k,l;
	cin>>n>>m;
	string s[501];
	vector<vector<bool> > pl(n, vector<bool> (m,false));
	for(i=0;i<n;i++)
		cin>>s[i];

	for(i=1;i<(n-1);i++)
	{
		for(j=1;j<(m-1);j++)
		{
			if(s[i][j]=='*' && s[i-1][j]=='*' && s[i+1][j]=='*' && s[i][j-1]=='*' && s[i][j+1]=='*')
			{
				mi=i;
				mj=j;
				for(k=mi;k>=0;k--)
				{
					if(s[k][mj]!='*')
						break;
					else
						pl[k][mj]=true;
				}
				for(k=mi;k<n;k++)
				{
					if(s[k][mj]!='*')
						break;
					else
						pl[k][mj]=true;
				}
				for(k=mj;k>=0;k--)
				{
					if(s[mi][k]!='*')
						break;
					else
						pl[mi][k]=true;
				}
				for(k=mj;k<m;k++)
				{
					if(s[mi][k]!='*')
						break;
					else
						pl[mi][k]=true;
				}
				for(k=0;k<n;k++)
				{
					for(l=0;l<m;l++)
					{
						if(pl[k][l]!=(s[k][l]=='*'))
						{
		    				cout<<"NO\n";
		    				return 0;
						}
					}
				}
				cout<<"YES\n";
				return 0;
			}
		}
	}

	cout<<"NO\n";
	return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
// Declare a multimap
multimap<int, string> MM;
# define M_PI  3.14159265358979323846

const int M=1e9+7;
long long mod(long long x){
    return ((x%M + M)%M);
}
long long add(long long a, long long b){
    return mod(mod(a)+mod(b));
}
long long mul(long long a, long long b){
    return mod(mod(a)*mod(b));
}

int main()
{
	ll n,m,i,j,c=0,mi=0,mj=0,f=0,k,l;
	cin>>n>>m;
	string s[501];
	vector<vector<bool> > pl(n, vector<bool> (m,false));
	for(i=0;i<n;i++)
		cin>>s[i];

	for(i=1;i<(n-1);i++)
	{
		for(j=1;j<(m-1);j++)
		{
			if(s[i][j]=='*' && s[i-1][j]=='*' && s[i+1][j]=='*' && s[i][j-1]=='*' && s[i][j+1]=='*')
			{
				mi=i;
				mj=j;
				for(k=mi;k>=0;k--)
				{
					if(s[k][mj]=='.')
						break;
					else
						pl[k][mj]=true;
				}
				for(k=mi;k<n;k++)
				{
					if(s[k][mj]=='.')
						break;
					else
						pl[k][mj]=true;
				}
				for(k=mj;k>=0;k--)
				{
					if(s[mi][k]=='.')
						break;
					else
						pl[mi][k]=true;
				}
				for(k=mj;k<n;k++)
				{
					if(s[mi][k]=='.')
						break;
					else
						pl[mi][k]=true;
				}
				for(k=0;k<n;k++)
				{
					for(l=0;l<m;l++)
					{
						if(pl[k][l]!=(s[k][l]=='*'))
						{
		    				cout<<"NO\n";
		    				return 0;
						}
					}
				}
				cout<<"YES\n";
				return 0;
			}
		}
	}

	cout<<"NO\n";
	return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
// Declare a multimap
multimap<int, string> MM;
# define M_PI  3.14159265358979323846

const int M=1e9+7;
long long mod(long long x){
    return ((x%M + M)%M);
}
long long add(long long a, long long b){
    return mod(mod(a)+mod(b));
}
long long mul(long long a, long long b){
    return mod(mod(a)*mod(b));
}

int main()
{
	ll n,m,i,j,c=0,mi=0,mj=0,f=0,k,l;
	cin>>n>>m;
	string s[n];
	vector<vector<bool> > pl(n, vector<bool> (m,false));
	for(i=0;i<n;i++)
		cin>>s[i];

	for(i=1;i<(n-1);i++)
	{
		for(j=1;j<(m-1);j++)
		{
			if(s[i][j]=='*' && s[i-1][j]=='*' && s[i+1][j]=='*' && s[i][j-1]=='*' && s[i][j+1]=='*')
			{
				mi=i;
				mj=j;
				for(k=mi;k>=0;k--)
				{
					if(s[k][mj]=='.')
						break;
					else
						pl[k][mj]=true;
				}
				for(k=mi;k<n;k++)
				{
					if(s[k][mj]=='.')
						break;
					else
						pl[k][mj]=true;
				}
				for(k=mj;k>=0;k--)
				{
					if(s[mi][k]=='.')
						break;
					else
						pl[mi][k]=true;
				}
				for(k=mj;k<n;k++)
				{
					if(s[mi][k]=='.')
						break;
					else
						pl[mi][k]=true;
				}
				for(k=0;k<n;k++)
				{
					for(l=0;l<m;l++)
					{
						if(s[k][l]=='*')
						{
						    if(pl[k][l]==false)
						    {
			    				cout<<"NO\n";
			    				return 0;
						    }
						}
					}
				}
				cout<<"YES\n";
				return 0;
			}
		}
	}

	cout<<"NO\n";
	return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
// Declare a multimap
multimap<int, string> MM;
# define M_PI  3.14159265358979323846

const int M=1e9+7;
long long mod(long long x){
    return ((x%M + M)%M);
}
long long add(long long a, long long b){
    return mod(mod(a)+mod(b));
}
long long mul(long long a, long long b){
    return mod(mod(a)*mod(b));
}

int main()
{
	ll n,m,i,j,c=0,mi=0,mj=0,f=0,k,l;
	cin>>n>>m;
	string s[n];
	for(i=0;i<n;i++)
		cin>>s[i];
	for(i=1;i<(n-1);i++)
	{
		if(f==1)
			break;
		for(j=1;j<(m-1);j++)
		{
			if(s[i][j]=='*' && s[i-1][j]=='*' && s[i+1][j]=='*' && s[i][j-1]=='*' && s[i][j+1]=='*')
			{
				mi=i;
				mj=j;

				vector<pair<ll,ll> > pl;
				pl.push_back(make_pair(mi,mj));
				for(k=mi-1;k>=0;k--)
				{
					if(s[k][mj]=='.')
						break;
					else
						pl.push_back(make_pair(k,mj));
				}
				for(k=mi+1;k<n;k++)
				{
					if(s[k][mj]=='.')
						break;
					else
						pl.push_back(make_pair(k,mj));
				}
				for(k=mj-1;k>=0;k--)
				{
					if(s[mi][k]=='.')
						break;
					else
						pl.push_back(make_pair(mi,k));
				}
				for(k=mj+1;k<n;k++)
				{
					if(s[mi][k]=='.')
						break;
					else
						pl.push_back(make_pair(mi,k));
				}
				for(k=0;k<n;k++)
				{
					for(l=0;l<m;l++)
					{
						if(s[k][l]=='*')
						{
						    pair<ll,ll> p=make_pair(k,l);
						    if(find(pl.begin(),pl.end(),p)==pl.end())
						    {
			    				cout<<"NO\n";
			    				return 0;
						    }
						}
					}
				}
				cout<<"YES\n";
				return 0;
			}
		}
	}

	cout<<"NO\n";
	return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
// Declare a multimap
multimap<int, string> MM;
# define M_PI  3.14159265358979323846

const int M=1e9+7;
long long mod(long long x){
    return ((x%M + M)%M);
}
long long add(long long a, long long b){
    return mod(mod(a)+mod(b));
}
long long mul(long long a, long long b){
    return mod(mod(a)*mod(b));
}

int main()
{
	ll n,m,i,j,c=0,mi,mj;
	cin>>n>>m;
	string s[n];
	for(i=0;i<n;i++)
		cin>>s[i];
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			if(i>0 && i<(n-1) && j>0 && j<(m-1) && s[i-1][j]=='*' && s[i+1][j]=='*' && s[i][j-1]=='*' && s[i][j+1]=='*')
			{
				c++;
				if(s[i][j]!='*')
				{
					cout<<"NO\n";
					return 0;
				}
				else
				{
					mi=i;
					mj=j;
				}
			}
		}
	}
	vector<pair<ll,ll> > pl;
	pl.push_back(make_pair(mi,mj));
	if(c==0 || c>1)
	{
		cout<<"NO\n";
		return 0;
	}
	for(i=mi-1;i>=0;i--)
	{
		if(s[i][mj]!='*')
			break;
		else
			pl.push_back(make_pair(i,mj));
	}
	for(i=mi+1;i<n;i++)
	{
		if(s[i][mj]!='*')
			break;
		else
			pl.push_back(make_pair(i,mj));
	}
	for(j=mj-1;j>=0;j--)
	{
		if(s[mi][j]!='*')
			break;
		else
			pl.push_back(make_pair(mi,j));
	}
	for(j=mj+1;j<n;j++)
	{
		if(s[mi][j]!='*')
			break;
		else
			pl.push_back(make_pair(mi,j));
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			if(s[i][j]=='*')
			{
			    pair<ll,ll> p=make_pair(i,j);
			    if(find(pl.begin(),pl.end(),p)==pl.end())
			    {
    				cout<<"NO\n";
    				return 0;
			    }
			}
		}
	}
	cout<<"YES\n";
	return 0;
}


#include<bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
#endif

	int n, m;
	cin >> n >> m;
	string s[n];
	for (int i = 0; i < n; i++) {
		cin >> s[i];
	}

	bool can = false;
	int x, y;
	for (int i = 1; i < n ; i++) {
		for (int j = 1; j < m ; j++) {
			if (s[i][j] == '*') {
				if (i > 0 && i < n - 1 && j > 0 && j < m - 1)
					if (s[i][j + 1] == '*' && s[i][j - 1] == '*' && s[i + 1][j] == '*' && s[i - 1][j] == '*' ) {
						can = true;
						x = i; y = j;
					}

			}

			if (can) {

				if (s[i][j] == '*') {

					if ( i != x && j != y) {
						can = false;
						break;
					}
					if (i == x) {
						if (s[i][j - 1] != '*') {
							can = false;
							break;
						}
					}
					if (j == y) {
						if (s[i - 1][j] != '*') {
							can = false;
							break;
						}
					}
				}
			}

		}
	}

	if (can)cout << "YES";
	else cout << "NO";

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
#endif

	int n, m;
	cin >> n >> m;
	string s[n];
	for (int i = 0; i < n; i++) {
		cin >> s[i];
	}

	bool can = false;
	int x, y;
	for (int i = 0; i < n ; i++) {
		for (int j = 0; j < m ; j++) {
			if (!can)
				if (s[i][j] == '*') {
					if (i > 0 && i < n - 1 && j > 0 && j < m - 1)
						if (s[i][j + 1] == '*' && s[i][j - 1] == '*' && s[i + 1][j] == '*' && s[i - 1][j] == '*' ) {
							can = true;
							x = i; y = j;
						}
				}

			if (can) {

				if (s[i][j] == '*') {

					if ( i != x && j != y) {
						can = false;
						goto hell;
					}
					if (i == x) {
						if (s[i][j - 1] != '*') {
							can = false;
							goto hell;
						}
					}
					if (j == y) {
						if (s[i - 1][j] != '*') {
							can = false;
							goto hell;
						}
					}
				}
			}

		}
	}

hell:

	if (can)cout << "YES";
	else cout << "NO";

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

const int mxN = 500;
string s[mxN];
int n, m;

bool OK(int i, int j) {return i >= 0 and i<n and j >= 0 and j < m ;}

int degree(int i, int j) {
	int cnt = 0;
	int x = 0, y = 0;
	if (OK(i + 1, j) and s[i + 1][j] == '*')cnt++;
	if (OK(i - 1, j) and s[i - 1][j] == '*')cnt++;
	if (OK(i , j + 1) and s[i][j + 1] == '*')cnt++;
	if (OK(i , j - 1) and s[i][j - 1] == '*')cnt++;

	if (cnt == 2) {
		if ((OK(i + 1, j) and s[i + 1][j] == '*') and ((OK(i , j + 1) and s[i][j + 1] == '*') or (OK(i , j - 1) and s[i][j - 1] == '*') ))
		{cout << "NO"; exit(0);}
		if ((OK(i - 1, j) and s[i - 1][j] == '*') and ((OK(i , j + 1) and s[i][j + 1] == '*') or (OK(i , j - 1) and s[i][j - 1] == '*') ))
		{cout << "NO"; exit(0);}
	}
	return cnt;
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);

	cin >> n >> m;
	for (int i = 0; i < n; i++) cin >> s[i];

	int edge = 0, centre = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (s[i][j] == '.')continue;
			int k = degree(i, j);
			if (k == 0)return cout << "NO", 0;
			if (k == 1)edge++;
			if (k == 3)return cout << "NO", 0;
			if (k == 4)centre++;
			// cout << k << ' ';
		} //cout << "\n";
	}
	if (edge != 4)return cout << "NO", 0;
	if (centre != 1)return cout << "NO", 0;
	cout << "YES" << '\n';

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
#endif

	int n, m;
	cin >> n >> m;
	string s[n];
	for (int i = 0; i < n; i++) {
		cin >> s[i];
	}

	bool can = false;
	int x, y;
	for (int i = 0; i < n ; i++) {
		for (int j = 0; j < m ; j++) {
			if (!can)
				if (s[i][j] == '*') {
					if (i > 0 && i < n - 1 && j > 0 && j < m - 1)
						if (s[i][j + 1] == '*' && s[i][j - 1] == '*' && s[i + 1][j] == '*' && s[i - 1][j] == '*' ) {
							can = true;
							x = i; y = j;
						}
				}

			if (can) {
				if (s[i][j] == '*') {
					if ( i != x && j != y) {
						can = false;
						goto hell;
					}
					if (i == x) {
						if (s[i][j - 1] != '*') {
							can = false;

							goto hell;
						}
					}
					if (j == y) {
						if (s[i - 1][j] != '*') {
							can = false;

							goto hell;
						}
					}
				}
			}

		}
	}

hell:

	if (can)cout << "YES";
	else cout << "NO";

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
#endif

	int n, m;
	cin >> n >> m;
	string s[n];
	for (int i = 0; i < n; i++) {
		cin >> s[i];
	}

	bool can = false;
	int x, y;
	for (int i = 0; i < n ; i++) {
		for (int j = 0; j < m ; j++) {
			if (s[i][j] == '*') {
				if (i > 0 && i < n - 1 && j > 0 && j < m - 1)
					if (s[i][j + 1] == '*' && s[i][j - 1] == '*' && s[i + 1][j] == '*' && s[i - 1][j] == '*' ) {
						can = true;
						x = i; y = j;
					}

			}

			if (can) {

				if (s[i][j] == '*') {

					if ( i != x && j != y) {
						can = false;
						goto hell;
					}
					if (i == x) {
						if (s[i][j - 1] != '*') {
							can = false;
							goto hell;
						}
					}
					if (j == y) {
						if (s[i - 1][j] != '*') {
							can = false;
							goto hell;
						}
					}
				}
			}

		}
	}

hell:

	if (can)cout << "YES";
	else cout << "NO";

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

const int mxN = 500;
string s[mxN];
int n, m;

bool OK(int i, int j) {return i >= 0 and i<n and j >= 0 and j < m ;}

int degree(int i, int j) {
	int cnt = 0;
	int x = 0, y = 0;
	if (OK(i + 1, j) and s[i + 1][j] == '*')cnt++, x++;
	if (OK(i - 1, j) and s[i - 1][j] == '*')cnt++, y++;
	if (OK(i , j + 1) and s[i][j + 1] == '*')cnt++, x++;
	if (OK(i , j - 1) and s[i][j - 1] == '*')cnt++, y++;

	if (cnt == 2 and (x == 2 or y == 2)) {cout << "NO"; exit(0);}
	return cnt;
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);

	cin >> n >> m;
	for (int i = 0; i < n; i++) cin >> s[i];

	int edge = 0, centre = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (s[i][j] == '.')continue;
			int k = degree(i, j);
			if (k == 0)return cout << "NO", 0;
			if (k == 1)edge++;
			if (k == 3)return cout << "NO", 0;
			if (k == 4)centre++;
			// cout << k << ' ';
		} //cout << "\n";
	}

	if (edge != 4)return cout << "NO", 0;
	if (centre != 1)return cout << "NO", 0;
	cout << "YES" << '\n';

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
#endif

	int n, m;
	cin >> n >> m;
	string s[n];
	for (int i = 0; i < n; i++) {
		cin >> s[i];
	}

	bool can = false;
	int x, y;
	for (int i = 0; i < n ; i++) {
		for (int j = 0; j < m ; j++) {
			if (s[i][j] == '*') {
				if (i > 0 && i < n - 1 && j > 0 && j < m - 1)
					if (s[i][j + 1] == '*' && s[i][j - 1] == '*' && s[i + 1][j] == '*' && s[i - 1][j] == '*' ) {
						can = true;
						x = i; y = j;
					}

			}

			if (can) {

				if (s[i][j] == '*') {

					if ( i != x && j != y) {
						can = false;
						break;
					}
					if (i == x) {
						if (s[i][j - 1] != '*') {
							can = false;
							break;
						}
					}
					if (j == y) {
						if (s[i - 1][j] != '*') {
							can = false;
							break;
						}
					}
				}
			}

		}
	}

	if (can)cout << "YES";
	else cout << "NO";

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
#endif

	int n, m;
	cin >> n >> m;
	string s[n];
	for (int i = 0; i < n; i++) {
		cin >> s[i];
	}

	bool can = false;
	int x, y;
	for (int i = 0; i < n ; i++) {
		for (int j = 0; j < m ; j++) {
			if (!can)
				if (s[i][j] == '*') {
					if (i > 0 && i < n - 1 && j > 0 && j < m - 1)
						if (s[i][j + 1] == '*' && s[i][j - 1] == '*' && s[i + 1][j] == '*' && s[i - 1][j] == '*' ) {
							can = true;
							x = i; y = j;
						}
				}

			if (can) {
				if (s[i][j] == '*') {
					if ( i != x && j != y) {
						can = false;
						goto hell;
					}
					if (i == x) {
						if (s[i - 1][j] != '*') {
							can = false;
							goto hell;
						}
					}
					if (j == y) {
						if (s[i][j - 1] != '*') {
							can = false;
							goto hell;
						}
					}
				}
			}

		}
	}

hell:

	if (can)cout << "YES";
	else cout << "NO";

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

const int mxN = 500;
string s[mxN];
int n, m;

bool OK(int i, int j) {return i >= 0 and i<n and j >= 0 and j < m ;}

int degree(int i, int j) {
	int cnt = 0;
	int x = 0, y = 0;
	if (OK(i + 1, j) and s[i + 1][j] == '*')cnt++, x ^= 1;
	if (OK(i - 1, j) and s[i - 1][j] == '*')cnt++, x ^= 1;
	if (OK(i , j + 1) and s[i][j + 1] == '*')cnt++, y ^= 1;
	if (OK(i , j - 1) and s[i][j - 1] == '*')cnt++, y ^= 1;

	if (cnt == 2 and x + y == 2)
	{cout << "NO"; exit(0);}

	return cnt;
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);

	cin >> n >> m;
	for (int i = 0; i < n; i++) cin >> s[i];

	int edge = 0, centre = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (s[i][j] == '.')continue;
			int k = degree(i, j);
			if (k == 0)return cout << "NO", 0;
			if (k == 1)edge++;
			if (k == 3)return cout << "NO", 0;
			if (k == 4)centre++;
			// cout << k << ' ';
		} //cout << "\n";
	}
	if (edge != 4)return cout << "NO", 0;
	if (centre != 1)return cout << "NO", 0;
	cout << "YES" << '\n';

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

const int mxN = 500;
string s[mxN];
int n, m;

bool OK(int i, int j) {return i >= 0 and i<n and j >= 0 and j < m ;}

int degree(int i, int j) {
	int cnt = 0;
	int x = 0, y = 0;
	if (OK(i + 1, j) and s[i + 1][j] == '*')cnt++, x++, y++;
	if (OK(i - 1, j) and s[i - 1][j] == '*')cnt++, y++;
	if (OK(i , j + 1) and s[i][j + 1] == '*')cnt++, x++;
	if (OK(i , j - 1) and s[i][j - 1] == '*')cnt++, y++, x++;

	if (cnt == 2 and (x == 2 or y == 2)) {cout << "NO"; exit(0);}
	return cnt;
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);

	cin >> n >> m;
	for (int i = 0; i < n; i++) cin >> s[i];

	int edge = 0, centre = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (s[i][j] == '.')continue;
			int k = degree(i, j);
			if (k == 0)return cout << "NO", 0;
			if (k == 1)edge++;
			if (k == 3)return cout << "NO", 0;
			if (k == 4)centre++;
			// cout << k << ' ';
		} //cout << "\n";
	}
	if (edge != 4)return cout << "NO", 0;
	if (centre != 1)return cout << "NO", 0;
	cout << "YES" << '\n';

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

const int mxN = 500;
string s[mxN];
int n, m;

bool OK(int i, int j) {return i >= 0 and i<n and j >= 0 and j < m ;}

int degree(int i, int j) {
	int cnt = 0;
	if (OK(i + 1, j) and s[i + 1][j] == '*')cnt++;
	if (OK(i - 1, j) and s[i - 1][j] == '*')cnt++;
	if (OK(i , j + 1) and s[i][j + 1] == '*')cnt++;
	if (OK(i , j - 1) and s[i][j - 1] == '*')cnt++;
	return cnt;
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);

	cin >> n >> m;
	for (int i = 0; i < n; i++) cin >> s[i];

	int edge = 0, centre = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (s[i][j] == '.')continue;
			int k = degree(i, j);
			if (k == 0)return cout << "NO", 0;
			if (k == 1)edge++;
			if (k == 3)return cout << "NO", 0;
			if (k == 4)centre++;
			// cout << k << ' ';
		} //cout << "\n";
	}

	if (edge != 4)return cout << "NO", 0;
	if (centre != 1)return cout << "NO", 0;
	cout << "YES" << '\n';

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
#endif

	int n, m;
	cin >> n >> m;
	string s[n];
	for (int i = 0; i < n; i++) {
		cin >> s[i];
	}

	bool can = false;
	int x, y;
	for (int i = 0; i < n ; i++) {
		for (int j = 0; j < m ; j++) {
			if (!can)
				if (s[i][j] == '*') {
					if (i > 0 && i < n - 1 && j > 0 && j < m - 1)
						if (s[i][j + 1] == '*' && s[i][j - 1] == '*' && s[i + 1][j] == '*' && s[i - 1][j] == '*' ) {
							can = true;
							x = i; y = j;
						}
				}

			if (can) {
				if (s[i][j] == '*') {
					if ( i != x && j != y) {
						can = false;
						goto hell;
					}
					if (i == x) {
						if (s[i][j - 1] != '*') {
							can = false;
							cout << i << " " << j << endl;

							goto hell;
						}
					}
					if (j == y) {
						if (s[i - 1][j] != '*') {
							can = false;

							goto hell;
						}
					}
				}
			}

		}
	}

hell:

	if (can)cout << "YES";
	else cout << "NO";

	return 0;
}


#include<bits/stdc++.h>
using namespace std;

const int mxN = 500;
string s[mxN];
int n, m;

bool OK(int i, int j) {return i >= 0 and i<n and j >= 0 and j < m ;}

int degree(int i, int j) {
	int cnt = 0;
	int x = 0, y = 0;
	if (OK(i + 1, j) and s[i + 1][j] == '*')cnt++, x ^= 1;
	if (OK(i - 1, j) and s[i - 1][j] == '*')cnt++, x ^= 1;
	if (OK(i , j + 1) and s[i][j + 1] == '*')cnt++, y ^= 1;
	if (OK(i , j - 1) and s[i][j - 1] == '*')cnt++, y ^= 1;

	if (cnt == 2 and x + y == 2)
	{cout << "NO"; exit(0);}

	return cnt;
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);

	cin >> n >> m;
	for (int i = 0; i < n; i++) cin >> s[i];

	int edge = 0, centre = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (s[i][j] == '.')continue;
			int k = degree(i, j);
			if (k == 0)return cout << "NO", 0;
			if (k == 1)edge++;
			if (k == 3)return cout << "NO", 0;
			if (k == 4)centre++;
		}
	}
	if (edge != 4)return cout << "NO", 0;
	if (centre != 1)return cout << "NO", 0;
	cout << "YES" << '\n';

	return 0;
}


#include<bits/stdc++.h>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int h,w;
	cin>>h>>w;
	char a[h][w];
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
			cin>>a[i][j];
	for(int i=1;i+1<h;i++)
		for(int j=1;j+1<w;j++)
		{
			if(a[i][j]=='*'&&a[i-1][j]=='*'&&a[i+1][j]=='*'&&a[i][j-1]=='*'&&a[i][j+1]=='*')
			{
				for(int k=0;k<h;k++)
					if(a[k][j]=='*')
						a[k][j]='.';
				for(int k=0;k<w;k++)
					if(a[i][k]=='*')
						a[i][k]='.';
				break;
			}
		}
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
			if(a[i][j]=='*')
			{
				cout<<"No"<<endl;
				return 0;
			}
	cout<<"Yes"<<endl;
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int h,w;
	cin>>h>>w;
	char a[h][w];
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
			cin>>a[i][j];
	for(int i=1;i+1<h;i++)
		for(int j=1;j+1<w;j++)
		{
			if(a[i][j]=='*'&&a[i-1][j]=='*'&&a[i+1][j]=='*'&&a[i][j-1]=='*'&&a[i][j+1]=='*')
			{
				for(int k=0;k<h;k++)
					if(a[k][j]=='*')
						a[k][j]='.';
					else
						break;
				for(int k=0;k<w;k++)
					if(a[i][k]=='*')
						a[i][k]='.';
					else
						break;
			}
			break;
		}
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
			if(a[i][j]=='*')
			{
				cout<<"No"<<endl;
				return 0;
			}
	cout<<"Yes"<<endl;
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int h,w;
	cin>>h>>w;
	char a[h][w];
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
			cin>>a[i][j];
	for(int i=1;i+1<h;i++)
		for(int j=1;j+1<w;j++)
		{
			if(a[i][j]=='*'&&a[i-1][j]=='*'&&a[i+1][j]=='*'&&a[i][j-1]=='*'&&a[i][j+1]=='*')
			{
				for(int k=0;k<h;k++)
					if(a[k][j]=='*')
						a[k][j]='.';
					else
						break;
				for(int k=0;k<w;k++)
					if(a[i][k]=='*')
						a[i][k]='.';
					else
						break;
			}
			break;
		}
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
			if(a[i][j]=='*')
			{
				cout<<"NO"<<endl;
				return 0;
			}
	cout<<"YES"<<endl;
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int h,w;
	cin>>h>>w;
	char a[h][w];
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
			cin>>a[i][j];
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
		{
			if(a[i][j]=='*'&&a[i-1][j]=='*'&&a[i+1][j]=='*'&&a[i][j-1]=='*'&&a[i][j+1]=='*')
			{
				for(int k=0;k<h;k++)
					if(a[k][j]=='*')
						a[k][j]='.';
				for(int k=0;k<w;k++)
					if(a[i][k]=='*')
						a[i][k]='.';
				break;
			}
		}
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
			if(a[i][j]=='*')
			{
				cout<<"No"<<endl;
				return 0;
			}
	cout<<"Yes"<<endl;
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int h,w;
	cin>>h>>w;
	char a[h][w];
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
		{
			cin>>a[i][j];
			if(a[i][j]=='*')
				a[i][j]=1;
			else
				a[i][j]=0;
		}
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
		{
			if(a[i][j]==1&&a[i-1][j]==1&&a[i+1][j]==1&&a[i][j-1]==1&&a[i][j+1]==1)
			{
				for(int k=0;k<h;k++)
					if(a[k][j]==1)
						a[k][j]--;
				for(int k=0;k<w;k++)
					if(a[i][k]==1)
						a[i][k]--;
				break;
			}
		}
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
			if(a[i][j]==1)
			{
				cout<<"No"<<endl;
				return 0;
			}
	cout<<"Yes"<<endl;
	return 0;
}


#include <bits/stdc++.h>
using namespace std;
int main() {
	int h, w;
	cin >> h >> w;
	char f[h][w];
	for (int i = 0; i < h; i ++) {
		for (int j = 0; j < w; j ++) {
			cin >> f[i][j];
		}
	}
	pair<int, int> pos;
	int posn = 0;
	for (int i = 1; i < h - 1; i ++) {
		for (int j = 1; j < w - 1; j ++) {
			if (f[i][j] == '*' and f[i - 1][j] == '*' and f[i + 1][j] == '*' and f[i][j - 1] == '*' and f[i][j + 1] == '*') {
				pos = make_pair(i, j);
				posn ++;
			}
		}
	}
	if (posn != 1) {
		cout << "NO" << endl;
		return 0;
	}
	for (int i = pos.first - 1; i >= 0; i --) {
		if (f[i][pos.second] == '*') {
			f[i][pos.second] = '.';
		} else {
			break;
		}
	}
	for (int i = pos.first + 1; i < h; i ++) {
		if (f[i][pos.second] == '*') {
			f[i][pos.second] = '.';
		} else {
			break;
		}
	}
	for (int i = pos.second - 1; i >= 0; i --) {
		if (f[pos.first][i] == '*') {
			f[pos.first][i] = '.';
		} else {
			break;
		}
	}
	for (int i = pos.second + 1; i < w; i ++) {
		if (f[pos.first][i] == '*') {
			f[pos.first][i] = '.';
		} else {
			break;
		}
	}
	int res = 0;
	for (int i = 0; i < h; i ++) {
		for (int j = 0; j < w; j ++) {
			if (f[i][j] == '*') {
				res ++;
			}
		}
	}
	if (res == 1) {
		cout << "YES";
	} else {
		cout << "NO";
	}
  return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define deb(x) cout<<#x<<"="<<x<<endl
#define deb2(x,y) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<endl
#define deb3(x,y,z) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<", "<<#z<<"="<<z<<endl
#define rng(x) x.begin(), x.end()
#define pb push_back
#define F first
#define S second
#define el endl

typedef long long ll;
typedef pair<int,int> pi;
typedef pair<ll,ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<bool> vb;

void solve(){
	int n, m; cin>>n>>m;
	vector <string> M(n);
	for(auto &s : M) cin>>s;

	int rw = -1, c = -1;
	for (int i = 0; i < n; ++i){
		if(count(rng(M[i]), '*') >= 3){
			rw = i;
			break;
		}
	}

	for (int i = 0; i < m; ++i){
		int cnt = 0;
		for (int j = 0; j < n; ++j){
			cnt += M[j][i]=='*';
		}
		if(cnt >= 3){
			c = i;
			break;
		}
	}
	if(rw==-1 or c==-1){
		cout<<"NO\n";
		return;
	}
	int u = 0, d = n-1, l = 0, r = m-1;
	while(M[u][c]=='.') u++;
	while(M[d][c]=='.') d--;
	while(M[rw][l]=='.') l++;
	while(M[rw][r]=='.') r--;

	for (int i = 0; i < n; ++i){
		for (int j = 0; j < m; ++j){
			if(M[i][j]=='.'){
				if(i==rw and j<=r and j>=l){
					cout<<"NO\n";
					return;
				}
				if(j==c and i<=d and i>=u){
					cout<<"NO\n";
					return;
				}
			}else{
				if(!(i==rw and j<=r and j>=l) and !(j==c and i<=d and i>=u)){
					cout<<"NO\n";
					return;
				}
			}
		}
	}

	cout<<"YES\n";

}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	#ifndef ONLINE_JUDGE
		freopen("input.txt", "r", stdin);
		freopen("output.txt", "w", stdout);
	#endif
	int T=1, tc = 1;
	// cin>>T;
	while(T--){
		solve();
	}
	return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define deb(x) cout<<#x<<"="<<x<<endl
#define deb2(x,y) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<endl
#define deb3(x,y,z) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<", "<<#z<<"="<<z<<endl
#define rng(x) x.begin(), x.end()
#define pb push_back
#define F first
#define S second
#define el endl

typedef long long ll;
typedef pair<int,int> pi;
typedef pair<ll,ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<bool> vb;

void solve(){
	int n, m; cin>>n>>m;
	vector <string> M(n);
	for(auto &s : M) cin>>s;

	int rw = -1, c = -1;
	for (int i = 1; i < n-1; ++i){
		if(count(rng(M[i]), '*') >= 3){
			rw = i;
			break;
		}
	}

	for (int i = 1; i < m-1; ++i){
		int cnt = 0;
		for (int j = 0; j < n; ++j){
			cnt += M[j][i]=='*';
		}
		if(cnt >= 3){
			c = i;
			break;
		}
	}
	if(rw==-1 or c==-1){
		cout<<"NO\n";
		return;
	}
	int u = 0, d = n-1, l = 0, r = m-1;
	while(M[u][c]=='.') u++;
	while(M[d][c]=='.') d--;
	while(M[rw][l]=='.') l++;
	while(M[rw][r]=='.') r--;

	for (int i = 0; i < n; ++i){
		for (int j = 0; j < m; ++j){
			if(M[i][j]=='.'){
				if((i==rw and j<=r and j>=l) or (j==c and i<=d and i>=u)){
					cout<<"NO\n";
					return;
				}
			}
			else{
				if(!(i==rw and j<=r and j>=l) and !(j==c and i<=d and i>=u)){
					cout<<"NO\n";
					return;
				}
			}
		}
	}

	cout<<"YES\n";

}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	#ifndef ONLINE_JUDGE
		freopen("input.txt", "r", stdin);
		freopen("output.txt", "w", stdout);
	#endif
	int T=1, tc = 1;
	// cin>>T;
	while(T--){
		solve();
	}
	return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define deb(x) cout<<#x<<"="<<x<<endl
#define deb2(x,y) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<endl
#define deb3(x,y,z) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<", "<<#z<<"="<<z<<endl
#define rng(x) x.begin(), x.end()
#define pb push_back
#define F first
#define S second
#define el endl

typedef long long ll;
typedef pair<int,int> pi;
typedef pair<ll,ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<bool> vb;

void solve(){
	int n, m; cin>>n>>m;
	vector <string> M(n);
	for(auto &s : M) cin>>s;

	int rw = -1, c = -1;
	for (int i = 0; i < n; ++i){
		if(count(rng(M[i]), '*') >= 3){
			rw = i;
			break;
		}
	}

	for (int i = 0; i < m; ++i){
		int cnt = 0;
		for (int j = 0; j < n; ++j){
			cnt += M[j][i]=='*';
		}
		if(cnt >= 3){
			c = i;
			break;
		}
	}
	if(rw==-1 or c==-1){
		cout<<"NO\n";
		return;
	}
	int u = 0, d = n-1, l = 0, r = m-1;
	while(u<n and M[u][c]=='.') u++;
	while(d>=0 and M[d][c]=='.') d--;
	while(l<m and M[rw][l]=='.') l++;
	while(r>=0 and M[rw][r]=='.') r--;

	for (int i = 0; i < n; ++i){
		for (int j = 0; j < m; ++j){
			if(M[i][j]=='.'){
				if(i==rw and j<=r and j>=l){
					cout<<"NO\n";
					return;
				}
				if(j==c and i<=d and i>=u){
					cout<<"NO\n";
					return;
				}
			}else{
				if(!(i==rw and j<=r and j>=l) and !(j==c and i<=d and i>=u)){
					cout<<"NO\n";
					return;
				}
			}
		}
	}

	cout<<"YES\n";

}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	#ifndef ONLINE_JUDGE
		freopen("input.txt", "r", stdin);
		freopen("output.txt", "w", stdout);
	#endif
	int T=1, tc = 1;
	// cin>>T;
	while(T--){
		solve();
	}
	return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define deb(x) cout<<#x<<"="<<x<<endl
#define deb2(x,y) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<endl
#define deb3(x,y,z) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<", "<<#z<<"="<<z<<endl
#define rng(x) x.begin(), x.end()
#define pb push_back
#define F first
#define S second
#define el endl

typedef long long ll;
typedef pair<int,int> pi;
typedef pair<ll,ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<bool> vb;

void solve(){
	int n, m; cin>>n>>m;
	vector <string> M(n);
	int stars = 0;
	for(auto &s : M){
		cin>>s;
		stars += count(rng(s), '*');
	}
	// deb(stars);

	for (int i = 1; i < n-1; ++i){
		for (int j = 1; j < m-1; ++j){
			if(M[i][j] == '.') continue;
			int u = i, d = i, l = j, r = j;
			while(u>=0 and M[u][j]=='*') u--;
			while(d<n and M[d][j]=='*') d++;
			while(l>=0 and M[i][l]=='*') l--;
			while(r<m and M[i][r]=='*') r++;
			// deb2(i, j);
			// deb2(l, r);
			// deb2(u, d);
			if(stars == (r-l-1) + (d-u-1) - 1 and l+1<j and r-1>j and u+1<i and d-1>i) {
				cout<<"YES\n";
				return;
			}
		}
	}

	cout<<"NO\n";

}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	#ifndef ONLINE_JUDGE
		freopen("input.txt", "r", stdin);
		freopen("output.txt", "w", stdout);
	#endif
	int T=1, tc = 1;
	// cin>>T;
	while(T--){
		solve();
	}
	return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define deb(x) cout<<#x<<"="<<x<<endl
#define deb2(x,y) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<endl
#define deb3(x,y,z) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<", "<<#z<<"="<<z<<endl
#define rng(x) x.begin(), x.end()
#define pb push_back
#define F first
#define S second
#define el endl

typedef long long ll;
typedef pair<int,int> pi;
typedef pair<ll,ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<bool> vb;

void solve(){
	int n, m; cin>>n>>m;
	vector <string> M(n);
	for(auto &s : M) cin>>s;

	int rw = -1, c = -1;
	for (int i = 0; i < n; ++i){
		if(count(rng(M[i]), '*') >= 3){
			rw = i;
			break;
		}
	}

	for (int i = 0; i < m; ++i){
		int cnt = 0;
		for (int j = 0; j < n; ++j){
			cnt += M[j][i]=='*';
		}
		if(cnt >= 3){
			c = i;
			break;
		}
	}
	if(rw==-1 or c==-1){
		cout<<"NO\n";
		return;
	}
	int u = 0, d = n-1, l = 0, r = m-1;
	while(M[u][c]=='.') u++;
	while(M[d][c]=='.') d--;
	while(M[rw][l]=='.') l++;
	while(M[rw][r]=='.') r--;

	for (int i = 0; i < n; ++i){
		for (int j = 0; j < m; ++j){
			if(M[i][j]=='.'){
				if((i==rw and j<=r and j>=l) or (j==c and i<=d and i>=u)){
					cout<<"NO\n";
					return;
				}
			}else{
				if(!(i==rw and j<=r and j>=l) and !(j==c and i<=d and i>=u)){
					cout<<"NO\n";
					return;
				}
			}
		}
	}

	cout<<"YES\n";

}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	#ifndef ONLINE_JUDGE
		freopen("input.txt", "r", stdin);
		freopen("output.txt", "w", stdout);
	#endif
	int T=1, tc = 1;
	// cin>>T;
	while(T--){
		solve();
	}
	return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define deb(x) cout<<#x<<"="<<x<<endl
#define deb2(x,y) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<endl
#define deb3(x,y,z) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<", "<<#z<<"="<<z<<endl
#define rng(x) x.begin(), x.end()
#define pb push_back
#define F first
#define S second
#define el endl

typedef long long ll;
typedef pair<int,int> pi;
typedef pair<ll,ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<bool> vb;

void solve(){
	int n, m; cin>>n>>m;
	vector <string> M(n);
	for(auto &s : M) cin>>s;

	int rw = -1, c = -1;
	for (int i = 0; i < n; ++i){
		if(count(rng(M[i]), '*') >= 3){
			rw = i;
			break;
		}
	}

	for (int i = 0; i < m; ++i){
		int cnt = 0;
		for (int j = 0; j < n; ++j){
			cnt += M[j][i]=='*';
		}
		if(cnt >= 3){
			c = i;
			break;
		}
	}
	if(rw==-1 or c==-1){
		cout<<"NO\n";
		return;
	}
	int u = 0, d = n-1, l = 0, r = m-1;
	while(u<n and M[u][c]=='.') u++;
	while(d>=0 and M[d][c]=='.') d--;
	while(l<m and M[rw][l]=='.') l++;
	while(r>=0 and M[rw][r]=='.') r--;

	for (int i = 0; i < n; ++i){
		for (int j = 0; j < m; ++j){
			if(M[i][j]=='.'){
				if(i==rw and j<=rw and j>=l){
					cout<<"NO\n";
					return;
				}
				if(j==c and i<=d and i>=u){
					cout<<"NO\n";
					return;
				}
			}else{
				if(!(i==rw and j<=r and j>=l) and !(j==c and i<=d and i>=u)){
					cout<<"NO\n";
					return;
				}
			}
		}
	}

	cout<<"YES\n";

}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	#ifndef ONLINE_JUDGE
		freopen("input.txt", "r", stdin);
		freopen("output.txt", "w", stdout);
	#endif
	int T=1, tc = 1;
	// cin>>T;
	while(T--){
		solve();
	}
	return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define deb(x) cout<<#x<<"="<<x<<endl
#define deb2(x,y) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<endl
#define deb3(x,y,z) cout<<#x<<"="<<x<<", "<<#y<<"="<<y<<", "<<#z<<"="<<z<<endl
#define rng(x) x.begin(), x.end()
#define pb push_back
#define F first
#define S second
#define el endl

typedef long long ll;
typedef pair<int,int> pi;
typedef pair<ll,ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<bool> vb;

void solve(){
	int n, m; cin>>n>>m;
	vector <string> M(n);
	int stars = 0;
	for(auto &s : M){
		cin>>s;
		stars += count(rng(s), '*');
	}

	for (int i = 1; i < n-1; ++i){
		for (int j = 1; j < m-1; ++j){
			if(M[i][j] == '.') continue;
			int u = i, d = i, l = j, r = j;
			while(u>=0 and M[u][j]=='*') u--;
			while(d<n and M[d][j]=='*') d++;
			while(l>=0 and M[i][l]=='*') l--;
			while(r<m and M[i][r]=='*') r++;
			if(stars == (r-l+1) + (d-u+1) - 1 and l+1<j and r-1>j and u+1<i and d-1>i) {
				cout<<"YES\n";
				return;
			}
		}
	}

	cout<<"NO\n";

}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	#ifndef ONLINE_JUDGE
		freopen("input.txt", "r", stdin);
		freopen("output.txt", "w", stdout);
	#endif
	int T=1, tc = 1;
	// cin>>T;
	while(T--){
		solve();
	}
	return 0;
}


#include <iostream>
#include <string>
#include <vector>

int main(void){

	int w, h; std::cin >> h >> w;
	std::vector<std::string> picture(h);
	for(int i=0; i<h; i++) std::cin >> picture[i];
	std::vector<std::vector<bool>> should_be_plus(h, std::vector<bool>(w, false));

	for(int i=1; i<h-1; i++){
		for(int j=1; j<w-1; j++){
			if(picture[i][j] == '*' && picture[i-1][j] == '*' && picture[i+1][j] == '*'
				&& picture[i][j+1] == '*' && picture[i][j-1] == '*'){ // Center found

				int upend = i, downend = i, leftend = j, rightend = j;
				while(upend >= 0 && picture[upend][j] == '*') should_be_plus[upend--][j] = true;
				while(downend < h && picture[downend][j] == '*') should_be_plus[downend++][j] = true;
				while(leftend >= 0 && picture[i][leftend] == '*') should_be_plus[i][leftend--] = true;
				while(rightend < w && picture[i][rightend] == '*') should_be_plus[i][rightend++] = true;
				//printf("End: up %d down %d left %d right %d\n", upend, downend, leftend, rightend);

				// If there is outside area exist then NO.
				for(int i2=0; i2<h; i2++) for(int j2=0; j2<w; j2++){
					if(should_be_plus[i2][j2] != (picture[i2][j2] == '*')){
						//std::cout << "Outside found ";
						std::cout << "NO\n";
						return 0;
					}
				}

				// Ok
				std::cout << "YES\n";
				return 0;
			}
		}
	}
	//std::cout << "No center found ";
	std::cout << "NO\n";
	return 0;
}


/*----- || Hare Krishna || -----*/

/*  "WHY DO WE FALL, BRUCE?"  */

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define elif else if
#define PI 3.1415926535897932384
#define MOD 1000000007
using namespace std;

char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

string s;
int t;

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);

    int n,m;
    cin >> n >> m;
    int tot = 0;

    vector<string> tab(n);

    for(int i=0; i<n; i++){
    	cin >> s;
    	tab[i]=s;
    	for(int j=0; j<m; j++){
    		if(tab[i][j]=='*'){
    			tot++;
			}
		}
	}
//	cout << tot << endl;
	if(tot<5){
		cout << "NO";
		return 0;
	}

	for(int i=1; i<n-1; i++){
		for(int j=1; j<m-1; j++){
			if(tab[i][j]=='*'){
				if(tab[i][j-1]!='*' || tab[i][j+1]!='*' || tab[i-1][j]!='*' || tab[i+1][j]!='*'){
					continue;
				}
				int cnt=1;
				for(int k=i-1; k>=0; k--){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=i+1; k<n; k++){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j-1; k>=0; k--){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j+1; k<m; k++){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				if(cnt==tot){
					cout << "YES";
					return 0;
				}
			}
		}
	}
	cout << "NO";
	return 0;

}


/*----- || Hare Krishna || -----*/

/*  "WHY DO WE FALL, BRUCE?"  */

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define elif else if
#define PI 3.1415926535897932384
#define MOD 1000000007
using namespace std;

char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

string s;
int t;

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);

    int n,m;
    cin >> n >> m;
    int tot = 0;

    vector<string> tab(n);

    for(int i=0; i<n; i++){
    	cin >> s;
    	tab[i]=s;
    	for(int j=0; j<m; j++){
    		if(tab[i][j]=='*'){
    			tot++;
			}
		}
	}
//	cout << tot << endl;
	if(tot<5){
		cout << "NO";
		return 0;
	}

	for(int i=1; i<n-1; i++){
		for(int j=1; j<m-1; j++){
			if(tab[i][j]=='*'){
				int cnt=1;
				for(int k=i-1; k>=0; k--){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=i+1; k<n; k++){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j-1; k>=0; k--){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j+1; k<m; k++){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				if(cnt==tot){
					cout << "YES";
					return 0;
				}
			}
		}
	}
	cout << "NO";
	return 0;

}


/*----- || Hare Krishna || -----*/

/*  "WHY DO WE FALL, BRUCE?"  */

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define elif else if
#define PI 3.1415926535897932384
#define MOD 1000000007
using namespace std;

char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

string s;
int t;

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);

    int n,m;
    cin >> n >> m;
    int tot = 0;

    char tab[n][m];
    for(int i=0; i<n; i++){
    	for(int j=0; j<m; j++){
    		cin >> tab[i][j];
    		if(tab[i][j]=='*'){
    			tot++;
			}
		}
	}

	for(int i=1; i<n-1; i++){
		for(int j=1; j<m-1; j++){
			if(tab[i][j]=='*'){
				int cnt=1;
				for(int k=i-1; k>=0; k--){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=i+1; k<n; k++){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j-1; k>=0; k--){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j+1; k<m; k++){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				if(cnt==tot && tot>4){
					cout << "YES";
					return 0;
				}
			}
		}
	}
	cout << "NO";
	return 0;

}


/*----- || Hare Krishna || -----*/

/*  "WHY DO WE FALL, BRUCE?"  */

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define elif else if
#define PI 3.1415926535897932384
#define MOD 1000000007
using namespace std;

char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

string s;
int t;

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);

    int n,m;
    cin >> n >> m;
    int tot = 0;

    vector<string> tab(n);

    for(int i=0; i<n; i++){
    	cin >> s;
    	tab[i]=s;
    	for(int j=0; j<m; j++){
    		if(tab[i][j]=='*'){
    			tot++;
			}
		}
	}
//	cout << tot << endl;
	if(tot<5){
		cout << "NO";
		return 0;
	}

	for(int i=1; i<n-1; i++){
		for(int j=1; j<m-1; j++){
			if(tab[i][j]=='*'){
				int cnt=1;
				for(int k=i-1; k>=0; k--){
					if(tab[k][j]=='*'){
						cnt++;
					}
				}
				for(int k=i+1; k<n; k++){
					if(tab[k][j]=='*'){
						cnt++;
					}
				}
				for(int k=j-1; k>=0; k--){
					if(tab[i][k]=='*'){
						cnt++;
					}
				}
				for(int k=j+1; k<m; k++){
					if(tab[i][k]=='*'){
						cnt++;
					}
				}
				if(cnt==tot){
					cout << "YES";
					return 0;
				}
			}
		}
	}
	cout << "NO";
	return 0;

}


/*----- || Hare Krishna || -----*/

/*  "WHY DO WE FALL, BRUCE?"  */

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define elif else if
#define PI 3.1415926535897932384
#define MOD 1000000007
using namespace std;

char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

string s;
int t;

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);

    int n,m;
    cin >> n >> m;
    int tot = 0;

    char tab[n][m];
    for(int i=0; i<n; i++){
    	for(int j=0; j<m; j++){
    		cin >> tab[i][j];
    		if(tab[i][j]=='*'){
    			tot++;
			}
		}
	}

	for(int i=1; i<n-1; i++){
		for(int j=1; j<m-1; j++){
			if(tab[i][j]=='*'){
				int cnt=1;
				for(int k=i-1; k>=0; k--){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=i+1; k<n; k++){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j-1; j>=0; k--){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j+1; j<m; k++){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				if(cnt==tot){
					cout << "YES";
					return 0;
				}
			}
		}
	}
	cout << "NO";
	return 0;

}


/*----- || Hare Krishna || -----*/

/*  "WHY DO WE FALL, BRUCE?"  */

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define elif else if
#define PI 3.1415926535897932384
#define MOD 1000000007
using namespace std;

char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

string s;
int t;

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);

    int n,m;
    cin >> n >> m;
    int tot = 0;

    char tab[n][m];
    for(int i=0; i<n; i++){
    	for(int j=0; j<m; j++){
    		cin >> tab[i][j];
    		if(tab[i][j]=='*'){
    			tot++;
			}
		}
	}

	for(int i=1; i<n-1; i++){
		for(int j=1; j<m-1; j++){
			if(tab[i][j]=='*'){
				int cnt=1;
				for(int k=i-1; k>=0; k--){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=i+1; k<n; k++){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j-1; j>=0; k--){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j+1; j<m; k++){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				if(cnt==tot && tot>3){
					cout << "YES";
					return 0;
				}
			}
		}
	}
	cout << "NO";
	return 0;

}


/*----- || Hare Krishna || -----*/

/*  "WHY DO WE FALL, BRUCE?"  */

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define elif else if
#define PI 3.1415926535897932384
#define MOD 1000000007
using namespace std;

char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

string s;
int t;

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);

    int n,m;
    cin >> n >> m;
    int tot = 0;

    char tab[n][m];
    for(int i=0; i<n; i++){
    	for(int j=0; j<m; j++){
    		cin >> tab[i][j];
    		if(tab[i][j]=='*'){
    			tot++;
			}
		}
	}

	for(int i=1; i<n-1; i++){
		for(int j=1; j<m-1; j++){
			if(tab[i][j]=='*'){
				int cnt=1;
				for(int k=i-1; k>=0; k--){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=i+1; k<n; k++){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j-1; j>=0; k--){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j+1; j<m; k++){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				if(cnt==tot && tot>4){
					cout << "YES";
					return 0;
				}
			}
		}
	}
	cout << "NO";
	return 0;

}


/*----- || Hare Krishna || -----*/

/*  "WHY DO WE FALL, BRUCE?"  */

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define elif else if
#define PI 3.1415926535897932384
#define MOD 1000000007
using namespace std;

char alpha[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

string s;
int t;

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);

    int n,m;
    cin >> n >> m;
    int tot = 0;

    char tab[n][m];
    for(int i=0; i<n; i++){
    	for(int j=0; j<m; j++){
    		cin >> tab[i][j];
    		if(tab[i][j]=='*'){
    			tot++;
			}
		}
	}

	if(tot<5){
		cout << "NO";
		return 0;
	}

	for(int i=1; i<n-1; i++){
		for(int j=1; j<m-1; j++){
			if(tab[i][j]=='*'){
				int cnt=1;
				for(int k=i-1; k>=0; k--){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=i+1; k<n; k++){
					if(tab[k][j]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j-1; k>=0; k--){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				for(int k=j+1; k<m; k++){
					if(tab[i][k]=='.'){
						break;
					}
					cnt++;
				}
				if(cnt==tot){
					cout << "YES";
					return 0;
				}
			}
		}
	}
	cout << "NO";
	return 0;

}


#include<bits/stdc++.h>
#define ll long long int
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define maxm pow(2,32)-1
#define vi vector<int>
#define pb push_back
#define F first
#define S second
#define sz(x) (ll)x.size()

using namespace std;

int main()
{
ios
	ll n,Tests=1,a=0,h=0,w=0,i=0,j=0,p=0,q=0,b=0;
	string str ="";

		cin>>h>>w;
		if(h<3||w<3) a=1 ;
		else
		{
		n=h*w;
		ll arr[n]={0};
		ll pos[h][w];
		for(i=0;i<h;i++)
		{
			for(j=0;j<w;j++)
			{
				pos[i][j]=0;
			}
		}
		//input & initialize pos
		for(j=0;j<h;j++)
		{
			string s;
			cin>>s;
			str+=s;

			for(i=0;i<w;i++)
			{
				if(s[i]=='*') pos[j][i]=1;
			}

		}

		i=j=0;
		while (i<n)
		{
			if(str[i]=='*')
			{
				arr[j] =i;
				j++;
			}
			i++;
		}
		//for(int y=0;y<j;y++) cout<<"\n"<<arr[y]<<" ";

		i=0;
		p = arr[0]/w;
		q = arr[0]%w;

		//vertical
		while(pos[p+i][q])
		{
			pos[p+i][q]=0;
			i++;
		}
		if(i<2) a=1;
		j=1;

		while(arr[j]!=arr[j+1]-1) j++;
		p=arr[j]/w;
		q=arr[j]%w;

		//horizontal
		while((pos[p][q] || !b )&& q<w && q)
		{
			if(pos[p][q])
			pos[p][q]=0;
			else b++;
			q++;
		}

		//check
		for(i=0;i<h;i++)
		{

			for(j=0;j<w;j++)
			{

				if(pos[i][j]) a++;
			}

		}
	}

	//res
		if(a) cout<<"NO"<<endl;
		else
		cout<<"YES"<<endl;

	return 0;
}

/*
5 6
......
..*...
.****.
..*...
..*...
*/


#include<bits/stdc++.h>
#define ll long long int
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define maxm pow(2,32)-1
#define vi vector<int>
#define pb push_back
#define F first
#define S second
#define sz(x) (ll)x.size()

using namespace std;

int main()
{
ios
	ll n,Tests=1,a=0,h=0,w=0,i=0,j=0,p=0,q=0,b=0;
	string str ="";

		cin>>h>>w;
		if(h<3||w<3) ;
		else
		{
		n=h*w;
		ll arr[n]={0};
		ll pos[h][w];
		for(i=0;i<h;i++)
		{
			for(j=0;j<w;j++)
			{
				pos[i][j]=0;
			}
		}
		//input & initialize pos
		for(j=0;j<h;j++)
		{
			string s;
			cin>>s;
			str+=s;

			for(i=0;i<w;i++)
			{
				if(s[i]=='*') pos[j][i]=1;
			}

		}

		i=j=0;
		while (i<n)
		{
			if(str[i]=='*')
			{
				arr[j] =i;
				j++;
			}
			i++;
		}
		//for(int y=0;y<j;y++) cout<<"\n"<<arr[y]<<" ";

		i=0;
		p = arr[0]/w;
		q = arr[0]%w;

		//vertical
		while(pos[p+i][q])
		{
			pos[p+i][q]=0;
			i++;
		}
		if(i<2) a=1;
		j=1;

		while(arr[j]!=arr[j+1]-1) j++;
		p=arr[j]/w;
		q=arr[j]%w;

		//horizontal
		while((pos[p][q] || !b )&& q<w && q)
		{
			if(pos[p][q])
			pos[p][q]=0;
			else b++;
			q++;
		}

		//check
		for(i=0;i<h;i++)
		{

			for(j=0;j<w;j++)
			{

				if(pos[i][j]) a++;
			}

		}
	}

	//res
		if(a) cout<<"NO"<<endl;
		else
		cout<<"YES"<<endl;

	return 0;
}

/*
5 6
......
..*...
.****.
..*...
..*...
*/


#include<bits/stdc++.h>
#define ll long long int
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define maxm pow(2,32)-1
#define vi vector<int>
#define pb push_back
#define F first
#define S second
#define sz(x) (ll)x.size()

using namespace std;

int main()
{
ios
	ll n,Tests=1,a=0,h=0,w=0,i=0,j=0,p=0,q=0,b=0,count=0;
	string str ="";

		cin>>h>>w;
		if(h<3||w<3) a=1 ;
		else
		{
		n=h*w;
		ll arr[n]={0};
		ll pos[h][w];
		for(i=0;i<h;i++)
		{
			for(j=0;j<w;j++)
			{
				pos[i][j]=0;
			}
		}
		//input & initialize pos
		for(j=0;j<h;j++)
		{
			string s;
			cin>>s;
			str+=s;

			for(i=0;i<w;i++)
			{
				if(s[i]=='*')
				{
					 pos[j][i]=1;
					 count++;
				}

			}

		}
		if(!count) a=1;
		else{
		i=j=0;
		while (i<n)
		{
			if(str[i]=='*')
			{
				arr[j] =i;
				j++;
			}
			i++;
		}
		//for(int y=0;y<j;y++) cout<<"\n"<<arr[y]<<" ";

		i=0;
		p = arr[0]/w;
		q = arr[0]%w;

		//vertical
		while(pos[p+i][q])
		{
			pos[p+i][q]=0;
			i++;
		}
		if(i<2) a=1;
		j=1;

		while(arr[j]!=arr[j+1]-1) j++;
		p=arr[j]/w;
		q=arr[j]%w;

		//horizontal
		while((pos[p][q] || !b )&& q<w && q)
		{
			if(pos[p][q])
			pos[p][q]=0;
			else b++;
			q++;
		}

		//check
		for(i=0;i<h;i++)
		{

			for(j=0;j<w;j++)
			{

				if(pos[i][j]) a++;
			}

		}
	}
	}

	//res
		if(a) cout<<"NO"<<endl;
		else
		cout<<"YES"<<endl;

	return 0;
}


#include<bits/stdc++.h>
#define ll long long int
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define maxm pow(2,32)-1
#define vi vector<int>
#define pb push_back
#define F first
#define S second
#define sz(x) (ll)x.size()

using namespace std;

int main()
{
ios
	ll n,Tests=1,a=0,h=0,w=0,i=0,j=0,p=0,q=0,b=0,count=0;
	string str ="";

		cin>>h>>w;
		if(h<3||w<3) a=1 ;
		else
		{
		n=h*w;
		ll arr[n]={0};
		ll pos[h][w];
		for(i=0;i<h;i++)
		{
			for(j=0;j<w;j++)
			{
				pos[i][j]=0;
			}
		}
		//input & initialize pos
		for(j=0;j<h;j++)
		{
			string s;
			cin>>s;
			str+=s;

			for(i=0;i<w;i++)
			{
				if(s[i]=='*')
				{
					 pos[j][i]=1;
					 count++;
				}

			}

		}
		if(!count) a=1;
		else{
		i=j=0;
		while (i<n)
		{
			if(str[i]=='*')
			{
				arr[j] =i;
				j++;
			}
			i++;
		}
		//for(int y=0;y<j;y++) cout<<"\n"<<arr[y]<<" ";

		i=0;
		p = arr[0]/w;
		q = arr[0]%w;

		//vertical
		while(pos[p+i][q]&&q&&q<w-1)
		{
			pos[p+i][q]=0;
			i++;
		}

		if(i<3) a=1;
		j=1;

		while(arr[j]!=arr[j+1]-1) j++;
		p=arr[j]/w;
		i=arr[j]%w;
		n=i;
		if(!pos[p][q+1]) a++;
		//horizontal
		while((pos[p][i] || i==q )&& i<w )
		{
			if(pos[p][i])
			pos[p][i]=0;

			i++;
		}

		if(i-n<3) a++;

		//check
		for(i=0;i<h;i++)
		{

			for(j=0;j<w;j++)
			{

				if(pos[i][j]) a++;
			}

		}
	}
	}

	//res
		if(a) cout<<"NO"<<endl;
		else
		cout<<"YES"<<endl;

	return 0;
}

/*
8 8
........
......*.
********
......*.
........
......*.
........
........

*/


#include<bits/stdc++.h>
#define ll long long int
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define maxm pow(2,32)-1
#define vi vector<int>
#define pb push_back
#define F first
#define S second
#define sz(x) (ll)x.size()

using namespace std;

int main()
{
ios
	ll n,Tests=1,a=0,h=0,w=0,i=0,j=0,p=0,q=0,b=0,count=0;
	string str ="";

		cin>>h>>w;
		if(h<3||w<3) a=1 ;
		else
		{
		n=h*w;
		ll arr[n]={0};
		ll pos[h][w];
		for(i=0;i<h;i++)
		{
			for(j=0;j<w;j++)
			{
				pos[i][j]=0;
			}
		}
		//input & initialize pos
		for(j=0;j<h;j++)
		{
			string s;
			cin>>s;
			str+=s;

			for(i=0;i<w;i++)
			{
				if(s[i]=='*')
				{
					 pos[j][i]=1;
					 count++;
				}

			}

		}
		if(!count) a=1;
		else{
		i=j=0;
		while (i<n)
		{
			if(str[i]=='*')
			{
				arr[j] =i;
				j++;
			}
			i++;
		}
		//for(int y=0;y<j;y++) cout<<"\n"<<arr[y]<<" ";

		i=0;
		p = arr[0]/w;
		q = arr[0]%w;

		//vertical
		while(pos[p+i][q])
		{
			pos[p+i][q]=0;
			i++;
		}
		if(i<3) a=1;
		j=1;

		while(arr[j]!=arr[j+1]-1) j++;
		p=arr[j]/w;
		q=arr[j]%w;
		n=q;
		//horizontal
		while((pos[p][q] || !b )&& q<w && q)
		{
			if(pos[p][q])
			pos[p][q]=0;
			else b++;

			q++;
		}
		if(q-n<3) a++;
		//check
		for(i=0;i<h;i++)
		{

			for(j=0;j<w;j++)
			{

				if(pos[i][j]) a++;
			}

		}
	}
	}

	//res
		if(a) cout<<"NO"<<endl;
		else
		cout<<"YES"<<endl;

	return 0;
}


#include<bits/stdc++.h>
#define ll long long int
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define maxm pow(2,32)-1
#define vi vector<int>
#define pb push_back
#define F first
#define S second
#define sz(x) (ll)x.size()

using namespace std;

int main()
{
ios
	ll n,Tests=1,a=0,h=0,w=0,i=0,j=0,p=0,q=0,b=0,count=0;
	string str ="";

		cin>>h>>w;
		if(h<3||w<3) a=1 ;
		else
		{
		n=h*w;
		ll arr[n]={0};
		ll pos[h][w];
		for(i=0;i<h;i++)
		{
			for(j=0;j<w;j++)
			{
				pos[i][j]=0;
			}
		}
		//input & initialize pos
		for(j=0;j<h;j++)
		{
			string s;
			cin>>s;
			str+=s;

			for(i=0;i<w;i++)
			{
				if(s[i]=='*')
				{
					 pos[j][i]=1;
					 count++;
				}

			}

		}
		if(!count) a=1;
		else{
		i=j=0;
		while (i<n)
		{
			if(str[i]=='*')
			{
				arr[j] =i;
				j++;
			}
			i++;
		}
		//for(int y=0;y<j;y++) cout<<"\n"<<arr[y]<<" ";

		i=0;
		p = arr[0]/w;
		q = arr[0]%w;

		//vertical
		while(pos[p+i][q]&&q&&q<w-1)
		{
			pos[p+i][q]=0;
			i++;
		}

		if(i<3) a=1;
		j=1;

		while((arr[j]!=arr[j+1]-1) && j<count+1) j++;
		p=arr[j]/w;
		i=arr[j]%w;
		n=i;
		if(!pos[p][q+1]) a++;
		//horizontal
		while((pos[p][i] || i==q )&& i<w )
		{
			if(pos[p][i])
			pos[p][i]=0;

			i++;
		}

		if(i-n<3) a++;

		//check
		for(i=0;i<h;i++)
		{

			for(j=0;j<w;j++)
			{

				if(pos[i][j]) a++;
			}

		}
	}
	}

	//res
		if(a) cout<<"NO"<<endl;
		else
		cout<<"YES"<<endl;

	return 0;
}

/*
8 8
........
......*.
********
......*.
........
......*.
........
........

*/


#include<bits/stdc++.h>
#define ll long long int
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define maxm pow(2,32)-1
#define vi vector<int>
#define pb push_back
#define F first
#define S second
#define sz(x) (ll)x.size()

using namespace std;

int main()
{
ios
	ll n,Tests=1,a=0,h=0,w=0,i=0,j=0,p=0,q=0,b=0,count=0;
	string str ="";

		cin>>h>>w;
		if(h<3||w<3) a=1 ;
		else
		{
		n=h*w;
		ll arr[n]={0};
		ll pos[h][w];
		for(i=0;i<h;i++)
		{
			for(j=0;j<w;j++)
			{
				pos[i][j]=0;
			}
		}
		//input & initialize pos
		for(j=0;j<h;j++)
		{
			string s;
			cin>>s;
			str+=s;

			for(i=0;i<w;i++)
			{
				if(s[i]=='*')
				{
					 pos[j][i]=1;
					 count++;
				}

			}

		}
		if(count<5) a=1;
		else{
		i=j=0;
		while (i<n)
		{
			if(str[i]=='*')
			{
				arr[j] =i;
				j++;
			}
			i++;
		}
		//for(int y=0;y<j;y++) cout<<"\n"<<arr[y]<<" ";

		i=0;
		p = arr[0]/w;
		q = arr[0]%w;

		//vertical
		while(pos[p+i][q]&&q&&q<w-1)
		{
			pos[p+i][q]=0;
			i++;
		}
		b=p+i-1;
		if(i<3) a=1;
		j=1;

		while((arr[j]!=arr[j+1]-1) && j<count+1) j++;
		p=arr[j]/w;
		i=arr[j]%w;
		if(b==p) a++;
		n=i;
		if(!pos[p][q+1]) a++;
		//horizontal
		while((pos[p][i] || i==q )&& i<w )
		{
			if(pos[p][i])
			pos[p][i]=0;

			i++;
		}

		if(i-n<3) a++;

		//check
		for(i=0;i<h;i++)
		{

			for(j=0;j<w;j++)
			{

				if(pos[i][j]) a++;
			}

		}
	}
	}

	//res
		if(a) cout<<"NO"<<endl;
		else
		cout<<"YES"<<endl;

	return 0;
}

/*
6 6

..*...

..*...

.***..

......

......

......

*/


#include<bits/stdc++.h>
#define ll long long int
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define maxm pow(2,32)-1
#define vi vector<int>
#define pb push_back
#define F first
#define S second
#define sz(x) (ll)x.size()

using namespace std;

int main()
{
ios
	ll n,Tests=1,a=0,h=0,w=0,i=0,j=0,p=0,q=0,b=0;
	string str ="";

		cin>>h>>w;
		n=h*w;
		ll arr[n]={0};
		ll pos[h][w];
		for(i=0;i<h;i++)
		{
			for(j=0;j<w;j++)
			{
				pos[i][j]=0;
			}
		}
		//input & initialize pos
		for(j=0;j<h;j++)
		{
			string s;
			cin>>s;
			str+=s;

			for(i=0;i<w;i++)
			{
				if(s[i]=='*') pos[j][i]=1;
			}

		}

		i=j=0;
		while (i<n)
		{
			if(str[i]=='*')
			{
				arr[j] =i;
				j++;
			}
			i++;
		}
		//for(int y=0;y<j;y++) cout<<"\n"<<arr[y]<<" ";

		i=0;
		p = arr[0]/w;
		q = arr[0]%w;

		//vertical
		while(pos[p+i][q])
		{
			pos[p+i][q]=0;
			i++;
		}
		if(i<2) a=1;
		j=1;

		while(arr[j]!=arr[j+1]-1) j++;
		p=arr[j]/w;
		q=arr[j]%w;

		//horizontal
		while((pos[p][q] || !b )&& q<w && q)
		{
			if(pos[p][q])
			pos[p][q]=0;
			else b++;
			q++;
		}

		//check
		for(i=0;i<h;i++)
		{

			for(j=0;j<w;j++)
			{

				if(pos[i][j]) a++;
			}

		}

	//res
		if(a) cout<<"NO"<<endl;
		else
		cout<<"YES"<<endl;

	return 0;
}

/*
5 6
......
..*...
.****.
..*...
..*...
*/


/*
This is code of SuperJ6 for Codeforces.
Don't copy my code during f*kin' contests.

2.71828182845904523536
*/

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
using namespace std;
#define endl '\n'

int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m;
	cin >> n >> m;

	char graph[n][m];

	pair<int, int> mid = make_pair(-1, -1);
	int amt = 0;

	for(int i = 0; i < n; i++){
		cin >> graph[i];
		for(int j = 0; j < m; j++) if(graph[i][j] == '*') amt++;
	}

	for(int i = 1; i < n - 1; i++){
		for(int j = 1; j < m - 1; j++){
			if(graph[i][j] == '*' && graph[i - 1][j] == '*' && graph[i + 1][j] == '*' && graph[i][j - 1] == '*' && graph[i][j + 1] == '*') mid = make_pair(i, j);
		}
	}

	if(mid.first == -1){
		cout << "NO" << endl;
		return 0;
	}

	int camt = 1;

	for(int i = mid.first + 1; graph[i][mid.second] == '*' && i < n; i++) camt++;
	for(int i = mid.first - 1; graph[i][mid.second] == '*' && i >= 0; i--) camt++;
	for(int i = mid.second + 1; graph[mid.first][i] == '*' && i < m; i++) camt++;
	for(int i = mid.second - 1; graph[mid.first][i] == '*' && i >= 0; i--) camt++;

	if(camt == amt){
		cout << "YES" << endl;
	}else{
		cout << "NO" << endl;
	}

	return 0;
}


/*
This is code of SuperJ6 for Codeforces.
Don't copy my code during f*kin' contests.

2.71828182845904523536
*/

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define endl '\n'

int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m;
	cin >> n >> m;

	char graph[n][m];

	pair<int, int> mid = make_pair(-1, -1);
	int amt = 0;

	for(int i = 0; i < n; i++){
		cin >> graph[i];
		for(int j = 0; j < m; j++) if(graph[i][j] == '*') amt++;
	}

	for(int i = 1; i < n - 1; i++){
		for(int j = 1; j < m - 1; j++){
			if(graph[i][j] == '*' && graph[i - 1][j] == '*' && graph[i + 1][j] == '*' && graph[i][j - 1] == '*' && graph[i][j + 1] == '*') mid = make_pair(i, j);
		}
	}

	if(mid.first == -1){
		cout << "NO" << endl;
		return 0;
	}

	int camt = 1;

	for(int i = mid.first + 1; i < n && graph[i][mid.second] == '*'; i++) camt++;
	for(int i = mid.first - 1; i >= 0 && graph[i][mid.second] == '*'; i--) camt++;
	for(int i = mid.second + 1; i < m && graph[mid.first][i] == '*'; i++) camt++;
	for(int i = mid.second - 1; i >= 0 && graph[mid.first][i] == '*'; i--) camt++;

	if(camt == amt){
		cout << "YES" << endl;
	}else{
		cout << "NO" << endl;
	}

	return 0;
}


/*
This is code of SuperJ6 for Codeforces.
Don't copy my code during f*kin' contests.

2.71828182845904523536
*/

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
using namespace std;
#define endl '\n'

int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m;
	cin >> n >> m;

	char graph[n][m];

	pair<int, int> mid = make_pair(-1, -1);
	int amt = 0;

	for(int i = 0; i < n; i++){
		cin >> graph[i];
		for(int j = 0; j < m; j++) if(graph[i][j] == '*') amt++;
	}

	for(int i = 1; i < n - 1; i++){
		for(int j = 1; j < m - 1; j++){
			if(graph[i][j] == '*' && graph[i - 1][j] == '*' && graph[i + 1][j] == '*' && graph[i][j - 1] == '*' && graph[i][j + 1] == '*') mid = make_pair(i, j);
		}
	}

	if(mid.first == -1){
		cout << "NO" << endl;
		return 0;
	}

	int camt = 1;

	for(int i = mid.first + 1; graph[i][mid.second] == '*' && i < n; i++) camt++;
	for(int i = mid.first - 1; graph[i][mid.second] == '*' && i >= 0; i--) camt++;
	for(int i = mid.second + 1; graph[mid.first][i] == '*' && i < n; i++) camt++;
	for(int i = mid.second - 1; graph[mid.first][i] == '*' && i >= 0; i--) camt++;

	if(camt == amt){
		cout << "YES" << endl;
	}else{
		cout << "NO" << endl;
	}

	return 0;
}


/*
This is code of SuperJ6 for Codeforces.
Don't copy my code during f*kin' contests.

2.71828182845904523536
*/

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
using namespace std;
#define endl '\n'

int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m;
	cin >> n >> m;

	char graph[n][m];

	pair<int, int> minx = make_pair(n, 0), miny = make_pair(m, 0), maxx = make_pair(-1, 0), maxy = make_pair(-1, 0);
	int amt = 1;

	for(int i = 0; i < n; i++){
		cin >> graph[i];

		for(int j = 0; j < m; j++){
			if(graph[i][j] == '*'){
				minx = min(minx, make_pair(i, j));
				miny = min(miny, make_pair(j, i));
				maxx = max(maxx, make_pair(i, j));
				maxy = max(maxy, make_pair(j, i));
				amt++;
			}
		}
	}

	if(minx.first >= miny.second ||  maxx.first <= miny.second || miny.first >= minx.second || maxy.first <= minx.second){
		cout << "NO" << endl;
		return 0;
	}

	int camt = 0;

	for(int i = minx.first; i <= maxx.first; i++){
		if(graph[i][minx.second] == '*') camt++;
	}

	for(int i = miny.first; i <= maxy.first; i++){
		if(graph[miny.second][i] == '*') camt++;
	}

	if(camt == amt){
		cout << "YES" << endl;
	}else{
		cout << "NO" << endl;
	}

	return 0;
}


/*
This is code of SuperJ6 for Codeforces.
Don't copy my code during f*kin' contests.

2.71828182845904523536
*/

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
using namespace std;
#define endl '\n'

int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m;
	cin >> n >> m;

	char graph[n][m];

	pair<int, int> minx = make_pair(n, 0), miny = make_pair(m, 0), maxx = make_pair(-1, 0), maxy = make_pair(-1, 0);
	int amt = 1;

	for(int i = 0; i < n; i++){
		cin >> graph[i];

		for(int j = 0; j < m; j++){
			if(graph[i][j] == '*'){
				minx = min(minx, make_pair(i, j));
				miny = min(miny, make_pair(j, i));
				maxx = max(maxx, make_pair(i, j));
				maxy = max(maxy, make_pair(j, i));
				amt++;
			}
		}
	}

	if(minx.first == miny.second ||  maxx.first == miny.second || miny.first == minx.second || maxy.first == minx.second || minx.second != maxx.second || miny.second != maxy.second || maxx.first == -1){
		cout << "NO" << endl;
		return 0;
	}

	int camt = 0;

	for(int i = minx.first; i <= maxx.first; i++){
		if(graph[i][minx.second] == '*') camt++;
	}

	for(int i = miny.first; i <= maxy.first; i++){
		if(graph[miny.second][i] == '*') camt++;
	}

	if(camt == amt){
		cout << "YES" << endl;
	}else{
		cout << "NO" << endl;
	}

	return 0;
}


/*
This is code of SuperJ6 for Codeforces.
Don't copy my code during f*kin' contests.

2.71828182845904523536
*/

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
using namespace std;
#define endl '\n'

int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m;
	cin >> n >> m;

	char graph[n][m];

	pair<int, int> mid = make_pair(-1, -1);
	int amt = 0;

	for(int i = 0; i < n; i++){
		cin >> graph[i];
		for(int j = 0; j < m; j++) if(graph[i][j] == '*') amt++;
	}

	for(int i = 1; i < n - 1; i++){
		for(int j = 1; j < n - 1; j++){
			if(graph[i][j] == '*' && graph[i - 1][j] == '*' && graph[i + 1][j] == '*' && graph[i][j - 1] == '*' && graph[i][j + 1] == '*') mid = make_pair(i, j);
		}
	}

	if(mid.first == -1){
		cout << "NO" << endl;
		return 0;
	}

	int camt = 1;

	for(int i = mid.first + 1; graph[i][mid.second] == '*' && i < n; i++) camt++;
	for(int i = mid.first - 1; graph[i][mid.second] == '*' && i >= 0; i--) camt++;
	for(int i = mid.second + 1; graph[mid.first][i] == '*' && i < n; i++) camt++;
	for(int i = mid.second - 1; graph[mid.first][i] == '*' && i >= 0; i--) camt++;

	if(camt == amt){
		cout << "YES" << endl;
	}else{
		cout << "NO" << endl;
	}

	return 0;
}


/*
This is code of SuperJ6 for Codeforces.
Don't copy my code during f*kin' contests.

2.71828182845904523536
*/

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
using namespace std;
#define endl '\n'

int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m;
	cin >> n >> m;

	char graph[n][m];

	pair<int, int> minx = make_pair(n, 0), miny = make_pair(m, 0), maxx = make_pair(-1, 0), maxy = make_pair(-1, 0);
	int amt = 1;

	for(int i = 0; i < n; i++){
		cin >> graph[i];

		for(int j = 0; j < m; j++){
			if(graph[i][j] == '*'){
				minx = min(minx, make_pair(i, j));
				miny = min(miny, make_pair(j, i));
				maxx = max(maxx, make_pair(i, j));
				maxy = max(maxy, make_pair(j, i));
				amt++;
			}
		}
	}

	if(minx.first == miny.second ||  maxx.first == miny.second || miny.first == minx.second || maxx.first == miny.second){
		cout << "NO" << endl;
		return 0;
	}

	int camt = 0;

	for(int i = minx.first; i <= maxx.first; i++){
		if(graph[i][minx.second] == '*') camt++;
	}

	for(int i = miny.first; i <= maxy.first; i++){
		if(graph[miny.second][i] == '*') camt++;
	}

	if(camt == amt){
		cout << "YES" << endl;
	}else{
		cout << "NO" << endl;
	}

	return 0;
}


/*
This is code of SuperJ6 for Codeforces.
Don't copy my code during f*kin' contests.

2.71828182845904523536
*/

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
using namespace std;
#define endl '\n'

int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m;
	cin >> n >> m;

	char graph[n][m];

	pair<int, int> minx = make_pair(n, 0), miny = make_pair(m, 0), maxx = make_pair(-1, 0), maxy = make_pair(-1, 0);
	int amt = 1;

	for(int i = 0; i < n; i++){
		cin >> graph[i];

		for(int j = 0; j < m; j++){
			if(graph[i][j] == '*'){
				minx = min(minx, make_pair(i, j));
				miny = min(miny, make_pair(j, i));
				maxx = max(maxx, make_pair(i, j));
				maxy = max(maxy, make_pair(j, i));
				amt++;
			}
		}
	}

	if(minx.first == miny.second ||  maxx.first == miny.second || miny.first == minx.second || maxy.first == minx.second || minx.second != maxx.second || miny.second != maxy.second){
		cout << "NO" << endl;
		return 0;
	}

	int camt = 0;

	for(int i = minx.first; i <= maxx.first; i++){
		if(graph[i][minx.second] == '*') camt++;
	}

	for(int i = miny.first; i <= maxy.first; i++){
		if(graph[miny.second][i] == '*') camt++;
	}

	if(camt == amt){
		cout << "YES" << endl;
	}else{
		cout << "NO" << endl;
	}

	return 0;
}


#include <bits/stdc++.h>
#define ll int64_t

#define pmax 1000000007
#define inf 1000000000000000000
#define alt 100002

#define vi vector<int>
#define vll vector<ll>
#define pii pair<int,int>
#define pll pair<ll,ll>
#define vpi vector<pii>
#define vpll vector<pll>
#define mp make_pair
#define pb push_back
#define ff first
#define ss second

#define f(x,y,z) for(ll y=x;y<z;y++)
#define fr(x,y,z) for(ll y=z-1;y>=x;y--)
#define fv(x,y) for(auto x=y.begin();x!=y.end();x++)
#define all(x) x.begin(),x.end()
#define outv(x) for(auto i=x.begin();i!=x.end();i++) cout<<*i<<' '; cout<<endl;
#define outvll(x) for(auto i=x.begin();i!=x.end();i++)	cout<<*i.ff<<' '<<*i.ss<<'\t';	cout<<endl;

using namespace std;

/*
bool sv[alt];
void fillsv(ll x)
{
    memset(sv,true,sizeof(sv));
    sv[0]=sv[1]=false;
    for(ll p=2;p*p<=x;p++)
        if(sv[p]==true)
            for(ll i=p*p;i<=x;i+=p)
                sv[i]=false;
}
*/

inline ll max(ll a,ll b)
{
    return (a>b)?a:b;
}

inline ll min(ll a,ll b)
{
    return (a<b)?a:b;
}

inline ll max3(ll a,ll b,ll c)
{
    return max(a,max(b,c));
}

inline ll min3(ll a,ll b,ll c)
{
    return min(a,min(b,c));
}

ll gcd(ll a,ll b)
{
    return (a%b==0)?b:gcd(b,a%b);
}

ll pow3(ll a,ll b, ll m=pmax)
{
    ll res=1;
    while(b>0)
    {
        if(b&1)
            res=(res*a)%m;
        a=(a*a)%m;
        b>>=1;
    }
    return res;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    //fillsv(alt);
    ll t=1;
    //cin>>t;
    while(t--)
    {
        ll w,h;
        cin>>h>>w;
        string s[h];
        f(0,i,h)
            cin>>s[i];
        ll ans=0,flag=0,fa=0;
        //f(0,x,h)
        //{
            //f(0,y,w)
                //cout<<s[x][y];
            //cout<<endl;
        //}
        f(0,i,h)
            f(0,j,w)
            {
                //cout<<"position "<<i<<" "<<j<<endl;
                if(s[i][j]=='*')
                {
                    if(flag==1)
                    {
                        cout<<"NO";
                        return 0;
                    }
                    else
                    {
                        ll dc=0,dc1=0,rc=0,rc1=0;
                        for(;i+dc<h&&s[i+dc][j]=='*';dc++)
                        {
                            //cout<<" checking "<<i+dc<<" "<<j<<endl;
                        }
                        for(;i-dc1<h&&i-dc1>=0&&s[i-dc1][j]=='*';dc1++)
                        {
                            //cout<<" checking "<<i-dc1<<" "<<j<<endl;
                        }
                        if(dc+dc1>=4&&dc>1&&dc1>1)
                            ans++;
                        for(;i<h&&j+rc>0&&j+rc<w&&s[i][j+rc]=='*';rc++)
                        {
                            //cout<<" checking "<<i<<" "<<j+rc<<endl;
                        }
                        for(;i<h&&j-rc1>=0&&j-rc1<w&&s[i][j-rc1]=='*';rc1++)
                        {
                            //cout<<" checking "<<i<<" "<<j-rc1<<endl;
                        }
                        if(rc+rc1>=4&&rc>1&&rc1>1)
                            ans++;
                        //cout<<" ans= "<<ans<<" "<<dc<<" "<<dc1<<" "<<rc<<" "<<rc1<<endl;
                        if(ans==2)
                        {
                            //cout<<" satisfies"<<endl;
                            f(0,x,dc)
                            {
                                //cout<<" changing "<<i+x<<" "<<j<<endl;
                                s[i+x][j]='.';
                            }
                            f(0,x,dc1)
                            {
                                //cout<<" changing "<<i-x<<" "<<j<<endl;
                                s[i-x][j]='.';
                            }
                            f(0,y,rc)
                            {
                                //cout<<" changing "<<i<<" "<<j+y<<endl;
                                s[i][j+y]='.';
                            }
                            f(0,y,rc1)
                            {
                                //cout<<" changing "<<i<<" "<<j-y<<endl;
                                s[i][j-y]='.';
                            }
                            flag=1;
                            fa=0;
                            i=0;
                            j=0;
                            //f(0,x,h)
                            //{
                                //f(0,y,w)
                                    //cout<<s[x][y];
                                //cout<<endl;
                            //}
                        }
                        else
                        {
                            fa=1;
                            ans=0;
                        }
                    }
                }
            }
        if(flag==1&&fa==0)
            cout<<"YES";
        else
            cout<<"NO";
    }
    return 0;
}