#include <bits/stdc++.h>
const int Mod = (int)1e9 + 7;
const int MX = 1073741822;
const long long MXLL = 9223372036854775807;
const int Sz = 1110111;
using namespace std;
inline void Read_rap() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
inline void randomizer3000() {
  unsigned int seed;
  asm("rdtsc" : "=A"(seed));
  srand(seed);
}
int n, m;
int cntCol[Sz], cntRow[Sz], row[Sz], col[Sz];
int a[101][101];
inline void FlipRow(int i) {
  for (int j = 1; j <= m; j++) {
    a[i][j] = -a[i][j];
    col[j] += 2 * a[i][j];
  }
  row[i] = -row[i];
}
inline void FlipCol(int j) {
  for (int i = 1; i <= n; i++) {
    a[i][j] = -a[i][j];
    row[i] += 2 * a[i][j];
  }
  col[j] = -col[j];
}
int main() {
  Read_rap();
  cin >> n >> m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) cin >> a[i][j];
  for (int i = 1; i <= n; i++) row[i] = accumulate(a[i] + 1, a[i] + m + 1, 0);
  for (int i = 1; i <= m; i++) {
    int sum = 0;
    for (int j = 1; j <= n; j++) sum += a[j][i];
    col[i] = sum;
  }
  for (bool run = 1; run;) {
    run = 0;
    for (int i = 1; i <= n; i++) {
      if (row[i] < 0) FlipRow(i), cntRow[i] ^= 1, run = 1;
    }
    for (int i = 1; i <= m; i++) {
      if (col[i] < 0) FlipCol(i), cntCol[i] ^= 1, run = 1;
    }
  }
  vector<int> r, c;
  for (int i = 1; i <= n; i++)
    if (cntRow[i]) r.push_back(i);
  for (int i = 1; i <= m; i++)
    if (cntCol[i]) c.push_back(i);
  cout << (int)(r.size()) << ' ';
  for (int x : r) cout << x << ' ';
  cout << endl;
  cout << (int)(c.size()) << ' ';
  for (int x : c) cout << x << ' ';
  return 0;
}
