#include<stdio.h>
#include<map>
using namespace std;
map <char, int> M;
char A[50][50];
int n, m;
int f(int x, int y, int k, int t){
	int s = 0;
	if(k == 15) return 1;
	if(x-1>=0 and k+1 == M[A[x-1][y]] ) s+=f(x-1,y,k+M[A[x-1][y]],t);
	if(y-1>=0 and k+1 == M[A[x][y-1]] ) s+=f(x,y-1,k+M[A[x][y-1]],t);
	if(x+1<n and k+1 == M[A[x+1][y]] ) s+=f(x+1,y,k+M[A[x+1][y]],t);
	if(y+1<m and k+1 == M[A[x][y+1]] ) s+=f(x,y+1,k+M[A[x][y+1]],t);
	if(x-1>=0 and t==0 ) s+=f(x-1,y,k,1);
	if(y-1>=0 and t==0 ) s+=f(x,y-1,k,1);
	if(x+1<n and t==0 ) s+=f(x+1,y,k,1);
	if(y+1<m and t==0 ) s+=f(x,y+1,k,1);
	return s;
}
int main(){
	for(int cc = 0 ; cc < 40 ; cc++ )
    {
        char cmd[100], out[100];
        sprintf(cmd, ".%d.in", cc+1);
        freopen(cmd, "r", stdin);
        int i, s=0, j;
        scanf("%d %d",&n, &m);
        for(i=0;i<n;i++) scanf("%s",A[i]);

        M['S']=1;
        M['J']=2;
        M['O']=4;
        M['I']=8;

        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
             if(A[i][j]=='S') s += f(i,j,1,0);
        sprintf(out, ".%d.out", cc+1);
        freopen(out, "w", stdout);
        printf("%d", s);
    }
}
