#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
int a[MAXN][MAXN];
int n, m;
bool changeR[MAXN], changeC[MAXN];
bool seekR() {
  bool flag = false;
  for (int i = 1; i <= n; ++i) {
    int sum = 0;
    for (int j = 1; j <= m; ++j) {
      sum += a[i][j];
    }
    if (sum < 0) {
      flag = true;
      changeR[i] = !changeR[i];
      for (int j = 1; j <= m; ++j) a[i][j] = -a[i][j];
    }
  }
  return flag;
}
bool seekC() {
  bool flag = false;
  for (int j = 1; j <= m; ++j) {
    int sum = 0;
    for (int i = 1; i <= n; ++i) {
      sum += a[i][j];
    }
    if (sum < 0) {
      flag = true;
      changeC[j] = !changeC[j];
      for (int i = 1; i <= n; ++i) a[i][j] = -a[i][j];
    }
  }
  return flag;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      scanf("%d", &a[i][j]);
    }
  }
  while (seekR() || seekC())
    ;
  int count = 0;
  for (int i = 1; i <= n; ++i) {
    if (changeR[i]) ++count;
  }
  printf("%d ", count);
  for (int i = 1; i <= n; ++i) {
    if (changeR[i]) printf("%d ", i);
  }
  putchar('\n');
  count = 0;
  for (int j = 1; j <= m; ++j) {
    if (changeC[j]) ++count;
  }
  printf("%d ", count);
  for (int j = 1; j <= m; ++j) {
    if (changeC[j]) printf("%d ", j);
  }
  putchar('\n');
}
