#include <bits/stdc++.h>
using namespace std;
char pic[105][105];
int vis[105][105];
int disx[] = {-1, 1, 0, 0};
int disy[] = {0, 0, -1, 1};
struct node {
  int ro, lo, len;
  node() {}
  node(int rr, int ll, int le) {
    ro = rr;
    lo = ll;
    len = le;
  }
};
int main() {
  int n, m;
  cin >> n >> m;
  vector<node> ve;
  for (int i = 0; i < n; i++) cin >> pic[i];
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (pic[i][j] == '*') {
        int tot = 105, cnt;
        for (int k = 0; k < 4; k++) {
          cnt = 0;
          for (int h = 1; h <= n; h++) {
            int xx = i + disx[k] * h;
            int yy = j + disy[k] * h;
            if (xx >= 0 && xx < n && yy >= 0 && yy < m && pic[xx][yy] == '*') {
              cnt++;
            } else
              break;
          }
          if (cnt != 0)
            tot = min(tot, cnt);
          else {
            tot = 105;
            break;
          }
        }
        if (tot != 105) {
          for (int k = 0; k < 4; k++) {
            for (int h = 1; h <= tot; h++) {
              int xx = i + disx[k] * h;
              int yy = j + disy[k] * h;
              if (xx >= 0 && xx < n && yy >= 0 && yy < m && pic[xx][yy] == '*')
                vis[xx][yy]++;
            }
          }
          vis[i][j]++;
          ve.push_back(node(i + 1, j + 1, tot));
        }
      }
    }
  }
  bool flag = true;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (pic[i][j] == '*') {
        if (vis[i][j] == 0) {
          flag = false;
          break;
        }
      }
    }
    if (!flag) break;
  }
  if (!flag)
    cout << -1 << endl;
  else {
    cout << ve.size() << endl;
    for (int i = 0; i < ve.size(); i++) {
      cout << ve[i].ro << " " << ve[i].lo << " " << ve[i].len << endl;
    }
  }
  return 0;
}
