#include <bits/stdc++.h>
using namespace std;
const int buffer = 200004;
const int NMAX = 100004;
class Reader {
 private:
  char buff[buffer];
  int cnt = 0;

 public:
  Reader() {
    fread(buff, buffer, 1, stdin);
    cnt = 0;
  }
  template <class T>
  Reader& operator>>(T& number) {
    number = 0;
    int sign = 1;
    while (buff[cnt] < '0' || '9' < buff[cnt]) {
      if (buff[cnt] == '-') sign = -1;
      if (++cnt == buffer) fread(buff, buffer, 1, stdin), cnt = 0;
    }
    while ('0' <= buff[cnt] && buff[cnt] <= '9') {
      number = number * 10 + buff[cnt] - '0';
      if (++cnt == buffer) fread(buff, buffer, 1, stdin), cnt = 0;
    }
    number *= sign;
    return *this;
  }
};
inline int Pow(int x, int n, const int MOD) {
  int ans = 0;
  while (n > 0) {
    if (n & 1) ans = 1LL * ans * x % MOD;
    n >>= 1;
    x = 1LL * x * x % MOD;
  }
  return ans;
}
Reader c;
int n, m, a[104][104];
int ansline[NMAX], anscol[NMAX];
inline int SumRow(const int i) {
  int ans = 0;
  for (int j = (1); j <= (m); ++j) ans += a[i][j];
  return ans;
}
inline int SumColumn(const int j) {
  int ans = 0;
  for (int i = (1); i <= (n); ++i) ans += a[i][j];
  return ans;
}
vector<int> lines, colums;
int main() {
  srand(time(0));
  c >> n >> m;
  for (int i = (1); i <= (n); ++i)
    for (int j = (1); j <= (m); ++j) c >> a[i][j];
  for (int i = (1); i <= (n); ++i)
    if (SumRow(i) < 0) lines.push_back(i);
  for (int j = (1); j <= (m); ++j)
    if (SumColumn(j) < 0) colums.push_back(j);
  while (lines.size() + colums.size() > 0) {
    if (lines.size() > colums.size()) {
      int i = rand() % lines.size();
      for (int j = (1); j <= (m); ++j) a[lines[i]][j] = -a[lines[i]][j];
      ansline[lines[i]] ^= 1;
      colums.clear();
      swap(lines[i], lines.back());
      lines.pop_back();
      for (int j = (1); j <= (m); ++j)
        if (SumColumn(j) < 0) colums.push_back(j);
    } else {
      int j = rand() % colums.size();
      for (int i = (1); i <= (n); ++i) a[i][colums[j]] = -a[i][colums[j]];
      anscol[colums[j]] ^= 1;
      lines.clear();
      swap(colums[j], colums.back());
      colums.pop_back();
      for (int i = (1); i <= (n); ++i)
        if (SumRow(i) < 0) lines.push_back(i);
    }
  }
  int cnt = 0;
  for (int i = (1); i <= (n); ++i)
    if (ansline[i] > 0) ++cnt;
  cout << cnt << " ";
  for (int i = (1); i <= (n); ++i)
    if (ansline[i] > 0) cout << i << " ";
  cout << "\n";
  cnt = 0;
  for (int j = (1); j <= (m); ++j)
    if (anscol[j] > 0) ++cnt;
  cout << cnt << " ";
  for (int j = (1); j <= (m); ++j)
    if (anscol[j] > 0) cout << j << " ";
  cout << "\n";
  return 0;
}
