#include <bits/stdc++.h>
const double eps = 1e-4, pi = acos(-1.0);
const int maxS = 1e3 + 13;
const int maxT = 20;
const long long MOD = 1e9 + 7;
using namespace std;
struct point {
  int x, y;
};
struct rs {
  int x, y, z;
};
int n, m, i, j, k, x, y, z, S, T, ii, s, t, l, r, pos, len;
int tot = 0, ans = 0, res = 0, kase = 0, cnt = 0;
bool chk[maxS][maxS], flag = true;
string s1, s2;
char ch[maxS][maxS];
vector<rs> v;
point dr[5] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {0, 0}};
bool fk(int x, int y, int len) {
  if (x - len < 0 || y - len < 0 || x + len >= n || y + len >= m) return false;
  int i;
  for (i = x - len; i <= x + len; i++)
    if (ch[i][y] == '.') return false;
  for (i = y - len; i <= y + len; i++)
    if (ch[x][i] == '.') return false;
  for (i = x - len; i <= x + len; i++) chk[i][y] = false;
  for (i = y - len; i <= y + len; i++) chk[x][i] = false;
  v.push_back({x, y, len});
  return true;
}
bool ok(int x, int y) {
  int i, j, k, len;
  for (k = 0; k < 5; k++) {
    for (i = 1; i < max(n, m); i++)
      if (fk(x + dr[k].x * i, y + dr[k].y * i, i)) return true;
  }
  return false;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++) {
      cin >> ch[i][j];
      if (ch[i][j] == '*') chk[i][j] = true;
    }
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++)
      if (flag && chk[i][j] && !ok(i, j)) flag = false;
  if (!flag)
    cout << -1 << endl;
  else {
    cout << v.size() << endl;
    for (auto t : v) cout << t.x + 1 << " " << t.y + 1 << " " << t.z << endl;
  }
  return 0;
}
