#include <bits/stdc++.h>
using namespace std;
const int maxn = 100 + 5;
int n, m, x[maxn][maxn], row[maxn], col[maxn];
bool doneRow[maxn], doneCol[maxn];
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      scanf("%d", &x[i][j]);
      row[i] += x[i][j];
      col[j] += x[i][j];
    }
  while (1) {
    int r = min_element(row, row + n) - row;
    int c = min_element(col, col + m) - col;
    if (row[r] >= 0 && col[c] >= 0) break;
    if (row[r] < col[c]) {
      doneRow[r] ^= 1;
      row[r] *= -1;
      for (int i = 0; i < m; i++) {
        col[i] -= x[r][i];
        x[r][i] *= -1;
        col[i] += x[r][i];
      }
    } else {
      doneCol[c] ^= 1;
      col[c] *= -1;
      for (int i = 0; i < n; i++) {
        row[i] -= x[i][c];
        x[i][c] *= -1;
        row[i] += x[i][c];
      }
    }
  }
  int cnt = 0;
  for (int i = 0; i < n; i++)
    if (doneRow[i]) cnt++;
  printf("%d ", cnt);
  for (int i = 0; i < n; i++)
    if (doneRow[i]) printf("%d ", i + 1);
  printf("\n");
  cnt = 0;
  for (int i = 0; i < m; i++)
    if (doneCol[i]) cnt++;
  printf("%d ", cnt);
  for (int i = 0; i < m; i++)
    if (doneCol[i]) printf("%d ", i + 1);
  printf("\n");
  return 0;
}
