#include <bits/stdc++.h>
using namespace std;
int N, M;
int a[100 + 5][100 + 5];
int rowFlag[100 + 5], colFlag[100 + 5];
vector<int> row, col;
int main() {
  scanf("%d %d", &N, &M);
  for (int i = 0; i < N; i++)
    for (int j = 0; j < M; j++) scanf("%d", &a[i][j]);
  row.resize(N, 0);
  col.resize(M, 0);
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
      row[i] += a[i][j];
      col[j] += a[i][j];
    }
  }
  while (1) {
    int _x = min_element(row.begin(), row.end()) - row.begin();
    int _y = min_element(col.begin(), col.end()) - col.begin();
    if (min(row[_x], col[_y]) >= 0) break;
    if (row[_x] < col[_y]) {
      for (int k = 0; k < M; k++) {
        row[_x] -= a[_x][k] + a[_x][k];
        col[k] -= a[_x][k] + a[_x][k];
        a[_x][k] = -a[_x][k];
      }
      rowFlag[_x] ^= 1;
    } else {
      for (int k = 0; k < N; k++) {
        row[k] -= (a[k][_y] + a[k][_y]);
        col[_y] -= (a[k][_y] + a[k][_y]);
        a[k][_y] = -a[k][_y];
      }
      colFlag[_y] ^= 1;
    }
  }
  row.clear();
  col.clear();
  for (int i = 0; i < N; i++) {
    if (rowFlag[i]) row.push_back(i);
  }
  for (int i = 0; i < M; i++) {
    if (colFlag[i]) col.push_back(i);
  }
  printf("%d", row.size());
  for (int i = 0; i < row.size(); i++) {
    printf(" %d", row[i] + 1);
  }
  puts("");
  printf("%d", col.size());
  for (int i = 0; i < col.size(); i++) {
    printf(" %d", col[i] + 1);
  }
  return 0;
}
