#include <bits/stdc++.h>
using namespace std;
int n, m;
const int N = 100 + 10;
vector<string> f(N);
vector<pair<int, int> > a;
vector<int> sz;
vector<vector<bool> > used(N, vector<bool>(N, 0));
bool out(int i, int j) {
  if (i < 0 || j < 0 || i >= n || j >= m) return true;
  return false;
}
void make_used(int i, int j, int c) {
  used[i][j] = 1;
  a.push_back(make_pair(i + 1, j + 1));
  sz.push_back(c);
  int k = 1;
  while (k <= c) {
    used[i + k][j] = 1;
    used[i - k][j] = 1;
    used[i][j + k] = 1;
    used[i][j - k] = 1;
    k++;
  }
}
void check(int i, int j) {
  int u = 0;
  int pos = i - 1;
  while (!out(pos, j) && f[pos][j] == '*') {
    pos--;
    u++;
  }
  int d = 0;
  pos = i + 1;
  while (!out(pos, j) && f[pos][j] == '*') {
    pos++;
    d++;
  }
  int l = 0;
  pos = j - 1;
  while (!out(i, pos) && f[i][pos] == '*') {
    pos--;
    l++;
  }
  int r = 0;
  pos = j + 1;
  while (!out(i, pos) && f[i][pos] == '*') {
    pos++;
    r++;
  }
  int c = min(u, min(d, min(l, r)));
  if (c > 0) make_used(i, j, c);
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> f[i];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (f[i][j] == '*') check(i, j);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (f[i][j] == '*' && !used[i][j]) {
        cout << "-1\n";
        return 0;
      }
  cout << a.size() << endl;
  for (int i = 0; i < a.size(); i++)
    cout << a[i].first << ' ' << a[i].second << ' ' << sz[i] << endl;
  return 0;
}
