output_description: Print the number of triples that satisfy the condition.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      H W
      s_{11}...s_{1W}
      :
      s_{H1}...s_{HW}
attempt: H, W = map(int, input().split())
  X = [[[0, 1][a == "#"] for a in input()] for i in range(H)]
  
  
  def countRD(n, i, j):
      return ccc(n, i, j, 1, 1)
  
  
  def countRU(n, i, j):
      return ccc(n, i, j, -1, 1)
  
  
  def countLD(n, i, j):
      return ccc(n, i, j, 1, -1)
  
  
  def countLU(n, i, j):
      return ccc(n, i, j, -1, -1)
  
  
  def countR(n, i, j):
      return cc(n, i, j, 0, 1)
  
  
  def countL(n, i, j):
      return cc(n, i, j, 0, -1)
  
  
  def countD(n, i, j):
      return cc(n, i, j, 1, 0)
  
  
  def countU(n, i, j):
      return cc(n, i, j, -1, 0)
  
  
  def ccc(n, i, j, DU, RL):
      c = 0
      for k in range(1, n):
          if i + k * DU >= 0 and i + k * DU < H:
              if j + (n - k) * RL >= 0 and j + (n - k) * RL < W:
                  c += X[i + k * DU][j + (n - k) * RL]
      return c
  
  
  def cc(n, i, j, DU, RL):
      ret = 0
      if i + n * DU >= 0 and i + n * DU < H:
          if j + n * RL >= 0 and j + n * RL < W:
              ret = X[i + n * DU][j + n * RL]
      return ret
  
  
  ans = 0
  for i in range(H):
      for j in range(W):
          for n in range(
              1, min(max(i + j, H - i + W - j), max(i + W - j, H - i + J)) + 2
          ):
              if countR(n, i, j) and countD(n, i, j):
                  ans += countLU(n, i, j)
              if countR(n, i, j) and countU(n, i, j):
                  ans += countLD(n, i, j)
              if countL(n, i, j) and countD(n, i, j):
                  ans += countRU(n, i, j)
              if countL(n, i, j) and countU(n, i, j):
                  ans += countRD(n, i, j)
              if countR(n, i, j) and countD(n, i, j) and countL(n, i, j):
                  ans += 1
              if countR(n, i, j) and countD(n, i, j) and countU(n, i, j):
                  ans += 1
              if countR(n, i, j) and countU(n, i, j) and countL(n, i, j):
                  ans += 1
              if countD(n, i, j) and countU(n, i, j) and countL(n, i, j):
                  ans += 1
  
  
  print(ans)
  
problem_description: Statement
  
  There are some coins in the xy-plane. The positions of the coins are
  represented by a grid of characters with H rows and W columns. If the
  character at the i-th row and j-th column, s_{ij}, is `#`, there is one coin
  at point (i,j); if that character is `.`, there is no coin at point (i,j).
  There are no other coins in the xy-plane.
  
  There is no coin at point (x,y) where 1\leq i\leq H,1\leq j\leq W does not
  hold. There is also no coin at point (x,y) where x or y (or both) is not an
  integer. Additionally, two or more coins never exist at the same point.
  
  Find the number of triples of different coins that satisfy the following
  condition:
  
    * Choosing any two of the three coins would result in the same Manhattan distance between the points where they exist.
  
  Here, the Manhattan distance between points (x,y) and (x',y') is
  |x-x'|+|y-y'|. Two triples are considered the same if the only difference
  between them is the order of the coins.
samples: [{"input": "5 4\n    #.##\n    .##.\n    #...\n    ..##\n    ...#", "output": "3\n    \n\n((1,1),(1,3),(2,2)),((1,1),(2,2),(3,1)) and ((1,3),(3,1),(4,4)) satisfy the\ncondition.\n\n* * *"}, {"input": "13 27\n    ......#.........#.......#..\n    #############...#.....###..\n    ..............#####...##...\n    ...#######......#...#######\n    ...#.....#.....###...#...#.\n    ...#######....#.#.#.#.###.#\n    ..............#.#.#...#.#..\n    #############.#.#.#...###..\n    #...........#...#...#######\n    #..#######..#...#...#.....#\n    #..#.....#..#...#...#.###.#\n    #..#######..#...#...#.#.#.#\n    #..........##...#...#.#####", "output": "870"}]