牛牛有一个由若干个六边形构成的三角网格,如下图所示

每个六边形格子里面有一个独一无二的标记,现在牛牛将某些格子的标记锁定,锁定的格子的标记不能与相邻的格子标记进行交换
现在给你一个二维字符数组S用来描述整个网格
s[i][j]表示第i行的第j个字符
如果S[i][j] = 'X',表示这个格子被锁定了
如果S[i][j] = '.', 表示这个格子是自由的
牛牛可以执行如下操作任意次数,
选择三个自由的格子,A,B,C, 这三个格子必须要有一个公共的顶点,将A里面的标记移动到B里面,将B里面的标记移动到C里面,将C里面的标记移动到A里面
牛牛想知道一共能产生多少不同的局面,对1e9+7取模
两个局面不同当且仅当某一个标记在两个局面中处于不同的位置