#include <bits/stdc++.h>
using namespace std;
const int N = 111;
int a[N][N], mat[N << 1][N << 1];
map<int, bool> ans, anss;
int col[N];
int n, m;
void bfs(int u) {
  queue<int> q;
  q.push(u);
  while (q.size()) {
    int u = q.front();
    q.pop();
    int s = 0;
    for (int v = (1); v <= (n + m); v++) {
      s += mat[u][v];
    }
    if (s < 0) {
      if (u <= n) {
        ans[u] = !ans[u];
        if (!ans[u]) ans.erase(u);
      } else {
        anss[u - n] = !anss[u - n];
        if (!anss[u - n]) anss.erase(u - n);
      }
      for (int v = (1); v <= (n + m); v++) {
        mat[u][v] *= -1;
        mat[v][u] *= -1;
      }
      for (int v = (1); v <= (n + m); v++) {
        if (mat[u][v]) {
          q.push(v);
        }
      }
    }
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = (1); i <= (n); i++) {
    for (int j = (1); j <= (m); j++) {
      cin >> a[i][j];
      mat[i][n + j] = a[i][j];
      mat[n + j][i] = a[i][j];
    }
  }
  for (int i = (1); i <= (n + m); i++) {
    bfs(i);
  }
  cout << (int)(ans).size() << " ";
  for (auto x : ans) {
    cout << x.first << " ";
  }
  cout << endl;
  cout << (int)(anss).size() << " ";
  for (auto x : anss) {
    cout << x.first << " ";
  }
  cout << endl;
  return 0;
}
