#include <bits/stdc++.h>
using namespace std;
int g[111][111];
int row[111], col[111];
int ur[111], uc[111];
set<pair<int, int> > S;
int n, m;
int main() {
  int i, j, k, u, v, w;
  while (cin >> n >> m) {
    S.clear();
    memset(ur, 0, sizeof(ur));
    memset(uc, 0, sizeof(uc));
    memset(row, 0, sizeof(row));
    memset(col, 0, sizeof(col));
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= m; j++) {
        cin >> g[i][j];
        row[i] += g[i][j];
        col[j] += g[i][j];
      }
    }
    while (1) {
      S.clear();
      for (i = 1; i <= n; i++) {
        S.insert(make_pair(row[i], -i));
      }
      for (i = 1; i <= m; i++) {
        S.insert(make_pair(col[i], i));
      }
      pair<int, int> tp = *(S.begin());
      if (tp.first >= 0) break;
      u = tp.second;
      if (u < 0) {
        u = -u;
        row[u] *= -1;
        ur[u] ^= 1;
        for (j = 1; j <= m; j++) {
          if ((ur[u] ^ uc[j]) == 0) {
            col[j] = col[j] + 2 * g[u][j];
          } else {
            col[j] = col[j] - 2 * g[u][j];
          }
        }
      } else {
        col[u] *= -1;
        uc[u] ^= 1;
        for (i = 1; i <= n; i++) {
          if ((ur[i] ^ uc[u]) == 0) {
            row[i] = row[i] + 2 * g[i][u];
          } else {
            row[i] = row[i] - 2 * g[i][u];
          }
        }
      }
    }
    vector<int> used;
    for (i = 1; i <= n; i++) {
      if (ur[i]) used.push_back(i);
    }
    printf("%d", used.size());
    for (i = 0; i < used.size(); i++) printf(" %d", used[i]);
    printf("\n");
    used.clear();
    for (i = 1; i <= m; i++) {
      if (uc[i]) used.push_back(i);
    }
    printf("%d", used.size());
    for (i = 0; i < used.size(); i++) printf(" %d", used[i]);
    printf("\n");
  }
  return 0;
}
