#include <bits/stdc++.h>
using namespace std;
int N, M, A[128][128];
int sumRow[128], sumCol[128];
int isInvR[128], isInvC[128];
int ansR[128], totR = 0;
int ansC[128], totC = 0;
int main() {
  memset(sumRow, 0, sizeof(sumRow));
  memset(sumCol, 0, sizeof(sumCol));
  memset(isInvR, 0, sizeof(isInvR));
  memset(isInvC, 0, sizeof(isInvC));
  scanf("%d %d", &N, &M);
  for (int i = 1; i <= N; ++i)
    for (int j = 1; j <= M; ++j) {
      scanf("%d", &A[i][j]);
      sumRow[i] += A[i][j];
      sumCol[j] += A[i][j];
    }
  for (;;) {
    bool ok = true;
    for (int row = 1; row <= N; ++row)
      if (sumRow[row] < 0) {
        ok = false;
        sumRow[row] = -sumRow[row];
        for (int col = 1; col <= M; ++col) {
          sumCol[col] -= 2 * A[row][col];
          A[row][col] = -A[row][col];
        }
        isInvR[row] ^= 1;
        break;
      }
    if (!ok) continue;
    for (int col = 1; col <= M; ++col)
      if (sumCol[col] < 0) {
        ok = false;
        sumCol[col] = -sumCol[col];
        for (int row = 1; row <= N; ++row) {
          sumRow[row] -= 2 * A[row][col];
          A[row][col] = -A[row][col];
        }
        isInvC[col] ^= 1;
        break;
      }
    if (!ok) continue;
    break;
  }
  for (int row = 1; row <= N; ++row)
    if (isInvR[row]) ansR[++totR] = row;
  for (int col = 1; col <= M; ++col)
    if (isInvC[col]) ansC[++totC] = col;
  printf("%d", totR);
  for (int i = 1; i <= totR; ++i) printf(" %d", ansR[i]);
  puts("");
  printf("%d", totC);
  for (int i = 1; i <= totC; ++i) printf(" %d", ansC[i]);
  puts("");
  return 0;
}
