#include <bits/stdc++.h>
using namespace std;
int row[int(1e2 * 5 + 10)];
int col[int(1e2 * 5 + 10)];
int ary[int(1e2 * 5 + 10)][int(1e2 * 5 + 10)];
int main() {
  std::ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      cin >> ary[i][j];
      row[i] += ary[i][j];
      col[j] += ary[i][j];
    }
  set<int> ar, ac;
  set<int> rq, cq;
  for (int i = 0; i < n; i++)
    if (row[i] < 0) rq.insert(i);
  for (int i = 0; i < m; i++)
    if (col[i] < 0) cq.insert(i);
  while (true) {
    if (rq.empty() && cq.empty()) break;
    while (!rq.empty()) {
      int r = *rq.begin();
      row[r] *= -1;
      if (ar.find(r) == ar.end())
        ar.insert(r);
      else
        ar.erase(r);
      rq.erase(r);
      for (int i = 0; i < m; i++) {
        col[i] -= 2 * ary[r][i];
        ary[r][i] *= -1;
        if (col[i] >= 0)
          cq.erase(i);
        else
          cq.insert(i);
      }
    }
    while (!cq.empty()) {
      int c = *cq.begin();
      col[c] *= -1;
      if (ac.find(c) == ac.end())
        ac.insert(c);
      else
        ac.erase(c);
      cq.erase(c);
      for (int i = 0; i < n; i++) {
        row[i] -= 2 * ary[i][c];
        ary[i][c] *= -1;
        if (row[i] >= 0)
          rq.erase(i);
        else
          rq.insert(i);
      }
    }
  }
  cout << ar.size() << " ";
  for (auto i : ar) cout << i + 1 << " ";
  cout << endl;
  cout << ac.size() << " ";
  for (auto i : ac) cout << i + 1 << " ";
  return 0;
}
