#include <bits/stdc++.h>
using namespace std;
const int MAXN = 205;
int N, M, V;
long long MOD;
string arr[MAXN];
vector<int> edge[MAXN * MAXN];
int par[MAXN * MAXN];
long long mat[MAXN][MAXN];
int tot;
int pt(int a, int b) { return a * (M + 1) + b; }
void djInit() {
  for (int i = 0; i < tot; i++) par[i] = i;
}
int djFind(int v) {
  if (par[v] == v)
    return v;
  else
    return par[v] = djFind(par[v]);
}
bool djUnion(int u, int v) {
  int pu = djFind(u), pv = djFind(v);
  if (pu == pv) return false;
  par[pu] = pv;
  return true;
}
long long determinant() {
  long long ans = 1;
  for (int i = 0; i < V; i++) {
    for (int j = 0; j < V; j++) {
      mat[i][j] %= MOD;
      if (mat[i][j] < 0) mat[i][j] += MOD;
    }
  }
  for (int i = 0; i < V; i++) {
    while (1) {
      int idx = -1;
      for (int j = i; j < V; j++)
        if (mat[j][i] != 0 && (idx == -1 || mat[j][i] < mat[idx][i])) idx = j;
      if (idx == -1) return 0;
      swap(mat[idx], mat[i]);
      if (i != idx) ans = MOD - ans;
      int pv = mat[i][i];
      bool any = false;
      for (int j = i + 1; j < V; j++) {
        long long val = mat[j][i];
        if (val == 0) continue;
        any = true;
        long long rat = val / pv;
        for (int k = i; k < V; k++) {
          mat[j][k] -= rat * mat[i][k];
          mat[j][k] %= MOD;
          if (mat[j][k] < 0) mat[j][k] += MOD;
        }
      }
      if (!any) break;
    }
  }
  for (int i = 0; i < V; i++) ans = (ans * mat[i][i]) % MOD;
  return ans;
}
int calc() {
  tot = (N + 1) * (M + 1);
  djInit();
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
      if (arr[i][j] == '/') {
        if (!(djUnion(pt(i + 1, j), pt(i, j + 1)))) return 0;
      } else if (arr[i][j] == '\\') {
        if (!(djUnion(pt(i, j), pt(i + 1, j + 1)))) return 0;
      } else {
        edge[pt(i + 1, j)].push_back(pt(i, j + 1));
        edge[pt(i, j)].push_back(pt(i + 1, j + 1));
      }
    }
  }
  long long ans = 0;
  for (int k = 0; k < 2; k++) {
    V = 0;
    map<int, int> mp;
    for (int i = 0; i <= N; i++) {
      for (int j = 0; j <= M; j++) {
        if (((i + j) & 1) != k) continue;
        int v = pt(i, j);
        if (par[v] == v) mp[v] = V++;
      }
    }
    if (V >= MAXN) continue;
    V--;
    for (int i = 0; i < V; i++)
      for (int j = 0; j < V; j++) mat[i][j] = 0;
    for (int i = 0; i <= N; i++) {
      for (int j = 0; j <= M; j++) {
        if (((i + j) & 1) != k) continue;
        int v = pt(i, j);
        for (auto u : edge[v]) {
          int pv = mp[djFind(v)], pu = mp[djFind(u)];
          mat[pv][pu]--;
          mat[pu][pv]--;
          mat[pv][pv]++;
          mat[pu][pu]++;
        }
      }
    }
    ans += determinant();
  }
  return ans % MOD;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> N >> M >> MOD;
  for (int i = 0; i < N; i++) cin >> arr[i];
  int ans = calc();
  cout << ans << endl;
  return 0;
}
