using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Util{
	static void Main(){
		Sol mySol =new Sol();
		mySol.Solve();
	}
}

class Sol{
	public void Solve(){
		int[] HWK = ria();

        List<char[]> cs = new List<char[]>();
        int blackCnt = 0;
        int[] blackCnt_forH = new int[HWK[0]];
        int[] blackCnt_forW = new int[HWK[1]];
        for(int i = 0; i < HWK[0]; i++) {
            char[] chars = new char[HWK[1]];
            string str = rs();

            for(int j = 0; j < HWK[1]; j++) {
                if(str[j] == '#') {
                    blackCnt++;
                    blackCnt_forH[i]++;
                    blackCnt_forW[j]++;
                }
                chars[j] = str[j];
            }
            cs.Add(chars);
        }

        int ans = 0;
        for(int i = 0; i < (1 << HWK[0]); i++) {
            int[] cond_H = new int[HWK[0]];
            int blackCnt_current_H = blackCnt;
            int drawCnt = 0;

            for(int j = 0; j < HWK[0]; j++) {
                cond_H[j] = 1 & (i >> j);

                if(cond_H[j] == 1) {
                    blackCnt_current_H -= blackCnt_forH[j];
                    drawCnt++;
                }
            }

            for(int i2 = 0; i2 < (1 << HWK[1]); i2++) {
                int[] cond_W = new int[HWK[1]];
                int blackCnt_current_W = blackCnt_current_H;

                for(int j2 = 0; j2 < HWK[1]; j2++) {
                    cond_W[j2] = 1 & (i2 >> j2);

                    if(cond_W[j2] == 1) {

                        for(int k = 0; k < HWK[0]; k++) {
                            if(cond_H[k] == 1) continue;

                            if(cs[k][j2] == '#') blackCnt_current_W--;
                        }
                    }
                }
                
                if(blackCnt_current_W == HWK[2]) ans++;
            }
        }

        // List<int> blackCnt_H = new List<int>();
        // // List<int[]> pattern_H = new List<int[]>();
        // for(int i = 0; i < (1 << HWK[0]); i++) {
        //     int[] cond = new int[HWK[0]];
        //     int blackCnt_current = blackCnt;
        //     bool isOver = false;

        //     for(int j = 0; j < HWK[0]; j++) {
        //         cond[j] = 1 & (i >> j);

        //         if(cond[j] == 1) {
        //             blackCnt_current -= blackCnt_forH[j];
                    
        //             if(blackCnt_current < HWK[2]) {
        //                 isOver = true;
        //                 break;
        //             }
        //         }
        //     }
        //     if(isOver) continue;

        //     blackCnt_H.Add(blackCnt_current);
        //     // pattern_H.Add(cond);
        // }
        // blackCnt_H.Sort();

        // List<int> blackCnt_W = new List<int>();
        // // List<int[]> pattern_W = new List<int[]>();
        // for(int i = 0; i < (1 << HWK[1]); i++) {
        //     int[] cond = new int[HWK[1]];
        //     int blackCnt_current = blackCnt;
        //     bool isOver = false;

        //     for(int j = 0; j < HWK[1]; j++) {
        //         cond[j] = 1 & (i >> j);

        //         if(cond[j] == 1) {
        //             blackCnt_current -= blackCnt_forW[j];
                    
        //             if(blackCnt_current < HWK[2]) {
        //                 isOver = true;
        //                 break;
        //             }
        //         }
        //     }
        //     if(isOver) continue;

        //     blackCnt_W.Add(blackCnt_current);
        //     // pattern_W.Add(cond);
        // }
        // blackCnt_W.Sort();
        
		Console.WriteLine(ans);
		Console.ReadLine();
	}

	static String rs(){return Console.ReadLine();}
	static int ri(){return int.Parse(Console.ReadLine());}
	static long rl(){return long.Parse(Console.ReadLine());}
	static double rd(){return double.Parse(Console.ReadLine());}
	static String[] rsa(char sep=' '){return Console.ReadLine().Split(sep);}
	static int[] ria(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>int.Parse(e));}
	static long[] rla(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>long.Parse(e));}
	static double[] rda(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>double.Parse(e));}
    static int[] generateNums(int num, int N){return Enumerable.Repeat(num, N).ToArray();}
    static int[] generateSuretsu(int N){return Enumerable.Range(0, N).ToArray();}
}

public static class Combination {
    public static IEnumerable<T[]> Enumerate<T>(IEnumerable<T> items, int k, bool withRepetition) {
        if (k == 1) {
            foreach (var item in items)
                yield return new T[] { item };
            yield break;
        }
        foreach (var item in items) {
            var leftside = new T[] { item };

            // item よりも前のものを除く （順列と組み合わせの違い)
            // 重複を許さないので、unusedから item そのものも取り除く
            var unused = withRepetition ? items : items.SkipWhile(e => !e.Equals(item)).Skip(1).ToList();

            foreach (var rightside in Enumerate(unused, k - 1, withRepetition)) {
                yield return leftside.Concat(rightside).ToArray();
            }
        }
    }
}


Measured memory_bytes: 27976