#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
ostream& operator<<(ostream& os, const pair<T, U>& _p) {
  return os << "(" << _p.first << "," << _p.second << ")";
}
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& _V) {
  bool f = true;
  os << "[";
  for (auto v : _V) {
    os << (f ? "" : ",") << v;
    f = false;
  }
  return os << "]";
}
template <typename T>
ostream& operator<<(ostream& os, const set<T>& _S) {
  bool f = true;
  os << "(";
  for (auto s : _S) {
    os << (f ? "" : ",") << s;
    f = false;
  }
  return os << ")";
}
template <typename T, typename U>
ostream& operator<<(ostream& os, const map<T, U>& _M) {
  return os << set<pair<T, U>>(_M.begin(), _M.end());
}
const signed long long INF = 1000000100;
const long double EPS = 1e-9;
const int MAXN = 1010;
char A[MAXN][MAXN];
int M, N;
void read_data() {
  scanf("%d %d", &M, &N);
  for (int(i) = (1); (i) <= (M); (i)++) scanf("%s", A[i] + 1);
}
int first[MAXN];
int second[MAXN];
void solve() {
  for (int(i) = (1); (i) <= (M); (i)++)
    for (int(j) = (1); (j) <= (N); (j)++)
      if (A[i][j] == '*') {
        ++first[i];
        ++second[j];
      }
  signed long long result = 0;
  for (int(i) = (1); (i) <= (M); (i)++)
    for (int(j) = (1); (j) <= (N); (j)++)
      if (A[i][j] == '*') {
        result += (first[i] - 1) * (second[j] - 1);
      }
  printf("%lld\n", result);
}
int main() {
  read_data();
  solve();
}

### Prompt

In Cpp, your task is to solve the following problem:

You are given a n × m field consisting only of periods ('.') and asterisks ('*'). Your task is to count all right triangles with two sides parallel to the square sides, whose vertices are in the centers of '*'-cells. A right triangle is a triangle in which one angle is a right angle (that is, a 90 degree angle).

Input

The first line contains two positive integer numbers n and m (1 ≤ n, m ≤ 1000). The following n lines consist of m characters each, describing the field. Only '.' and '*' are allowed.

Output

Output a single number — total number of square triangles in the field. Please, do not use %lld specificator to read or write 64-bit integers in C++. It is preffered to use cout (also you may use %I64d).

Examples

Input

2 2
**
*.


Output

1


Input

3 4
*..*
.**.
*.**


Output

9

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
ostream& operator<<(ostream& os, const pair<T, U>& _p) {
  return os << "(" << _p.first << "," << _p.second << ")";
}
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& _V) {
  bool f = true;
  os << "[";
  for (auto v : _V) {
    os << (f ? "" : ",") << v;
    f = false;
  }
  return os << "]";
}
template <typename T>
ostream& operator<<(ostream& os, const set<T>& _S) {
  bool f = true;
  os << "(";
  for (auto s : _S) {
    os << (f ? "" : ",") << s;
    f = false;
  }
  return os << ")";
}
template <typename T, typename U>
ostream& operator<<(ostream& os, const map<T, U>& _M) {
  return os << set<pair<T, U>>(_M.begin(), _M.end());
}
const signed long long INF = 1000000100;
const long double EPS = 1e-9;
const int MAXN = 1010;
char A[MAXN][MAXN];
int M, N;
void read_data() {
  scanf("%d %d", &M, &N);
  for (int(i) = (1); (i) <= (M); (i)++) scanf("%s", A[i] + 1);
}
int first[MAXN];
int second[MAXN];
void solve() {
  for (int(i) = (1); (i) <= (M); (i)++)
    for (int(j) = (1); (j) <= (N); (j)++)
      if (A[i][j] == '*') {
        ++first[i];
        ++second[j];
      }
  signed long long result = 0;
  for (int(i) = (1); (i) <= (M); (i)++)
    for (int(j) = (1); (j) <= (N); (j)++)
      if (A[i][j] == '*') {
        result += (first[i] - 1) * (second[j] - 1);
      }
  printf("%lld\n", result);
}
int main() {
  read_data();
  solve();
}

```