#include <bits/stdc++.h>
using namespace std;
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
const int mod = 1e9 + 7;
const int N = 1e6 + 10;
const long long INF = 1e18;
const long double EPS = 1e-12;
int row[105];
int col[105];
int urow[105];
int ucol[105];
int inrow[105];
int incol[105];
int a[105][105];
queue<pair<int, int> > qu;
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < (int)n; i++) {
    for (int j = 0; j < (int)m; j++) {
      cin >> a[i][j];
    }
  }
  for (int i = 0; i < (int)n; i++) {
    for (int j = 0; j < (int)m; j++) {
      row[i] += a[i][j];
    }
  }
  for (int j = 0; j < (int)m; j++) {
    for (int i = 0; i < (int)n; i++) {
      col[j] += a[i][j];
    }
  }
  for (int i = 0; i < (int)n; i++) {
    if (row[i] < 0) {
      qu.push(make_pair(i, 0));
      inrow[i] ^= 1;
    }
  }
  for (int i = 0; i < (int)m; i++) {
    if (col[i] < 0) {
      qu.push(make_pair(i, 1));
      incol[i] ^= 1;
    }
  }
  while (not qu.empty()) {
    auto tmp = qu.front();
    qu.pop();
    int x = tmp.first;
    int fl = tmp.second;
    if (fl == 0) {
      inrow[x] = 0;
    } else {
      incol[x] = 0;
    }
    if (fl && col[x] >= 0) continue;
    if (not fl && row[x] >= 0) continue;
    if (fl == 0) {
      urow[x] ^= 1;
      for (int j = 0; j < (int)m; j++) {
        col[j] -= a[x][j];
        a[x][j] = -a[x][j];
        col[j] += a[x][j];
        if (not incol[j] && col[j] < 0) {
          incol[j] = 1;
          qu.push(make_pair(j, 1));
        }
      }
      row[x] = -row[x];
    } else {
      ucol[x] ^= 1;
      for (int i = 0; i < (int)n; i++) {
        row[i] -= a[i][x];
        a[i][x] = -a[i][x];
        row[i] += a[i][x];
        if (not inrow[i] && row[i] < 0) {
          inrow[i] = 1;
          qu.push(make_pair(i, 0));
        }
      }
      col[x] = -col[x];
    }
  }
  int r = 0;
  for (int i = 0; i < (int)n; i++) {
    r += urow[i];
  }
  cout << r << " ";
  for (int i = 0; i < (int)n; i++)
    if (urow[i]) cout << i + 1 << " ";
  cout << endl;
  int c = 0;
  for (int i = 0; i < (int)m; i++) {
    c += ucol[i];
  }
  cout << c << " ";
  for (int i = 0; i < (int)m; i++)
    if (ucol[i]) cout << i + 1 << " ";
  cout << endl;
  return 0;
}
