#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector VI; typedef pair PII; #define REP(i,s,t) for(int i=(s);i<(t);i++) #define FILL(x,v) memset(x,v,sizeof(x)) #define MAXN 30005 #define MAXM 20 char g[MAXN][MAXM + 1]; VI eng[MAXM]; int ok[MAXM + 1]; VI neighbors[1 << MAXM]; bool fullNeighbors[1 << MAXM]; int t[MAXN]; int main() { int n, m; cin >> n >> m; REP(i,0,n) cin >> g[i]; REP(j,0,m) { REP(i,0,n) if (g[i][j] == '1') eng[j].push_back(i); } FILL(ok, true); REP(maskJob,1,1<= m) break; } } if (nb.size() == m) fullNeighbors[maskJob] = true; } if (!fullNeighbors[maskJob] && nb.size() < k) ok[k] = false; } int ans = 0; REP(k,0,m+1) { if (ok[k]) ans = k; else break; } cout << ans << endl; return 0; }