#include <bits/stdc++.h>
using namespace std;
queue<pair<int, int> > ans;
queue<int> s;
char a[110][110];
int b[110][110], n, m;
void updata(int x, int y, int mi) {
  b[x][y] = 1;
  for (int i = x + 1, k = 0; k < mi; k++, i++) {
    b[i][y] = 1;
  }
  for (int i = x - 1, k = 0; k < mi; k++, i--) {
    b[i][y] = 1;
  }
  for (int i = y + 1, k = 0; k < mi; k++, i++) {
    b[x][i] = 1;
  }
  for (int i = y - 1, k = 0; k < mi; k++, i--) {
    b[x][i] = 1;
  }
}
void check(int x, int y) {
  if (a[x][y] == '.') return;
  int mi = 0x3f3f3f3f;
  int dy, dx, sum;
  dy = y - 1, sum = 0;
  while (dy >= 0) {
    if (a[x][dy] == '*')
      sum++;
    else
      break;
    dy--;
  }
  mi = min(sum, mi);
  dy = y + 1, sum = 0;
  while (dy < m) {
    if (a[x][dy] == '*')
      sum++;
    else
      break;
    dy++;
  }
  mi = min(sum, mi);
  dx = x - 1, sum = 0;
  while (dx >= 0) {
    if (a[dx][y] == '*')
      sum++;
    else
      break;
    dx--;
  }
  mi = min(sum, mi);
  dx = x + 1, sum = 0;
  while (dx < n) {
    if (a[dx][y] == '*')
      sum++;
    else
      break;
    dx++;
  }
  mi = min(sum, mi);
  ;
  if (mi) {
    ans.push({x, y});
    s.push(mi);
    updata(x, y, mi);
  }
}
int sol() {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (a[i][j] == '*' && b[i][j] == -1) return 1;
    }
  }
  return 0;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%s", a[i]);
  memset(b, -1, sizeof(b));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      check(i, j);
    }
  }
  if (sol()) {
    printf("-1");
    return 0;
  }
  printf("%d\n", ans.size());
  while (ans.size()) {
    pair<int, int> f = ans.front();
    ans.pop();
    printf("%d %d %d\n", f.first + 1, f.second + 1, s.front());
    s.pop();
  }
}
