#include using namespace std; using ll = long long; #define rep(i, s, t) for (ll i = (ll)s; i < (ll)(t); i++) #define rrep(i, s, t) for (ll i = (ll)(t) - 1; i >= (ll)(s); i--) #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) #define TT template template bool chmin(T1& x, T2 y) { return x > y ? (x = y, true) : false; } template bool chmax(T1& x, T2 y) { return x < y ? (x = y, true) : false; } struct io_setup { io_setup() { ios::sync_with_stdio(false); std::cin.tie(nullptr); cout << fixed << setprecision(15); srand(time(NULL)); } } io_setup; void solve() { int N, M; cin >> N >> M; vector S(M); rep(i, 0, M) cin >> S[i]; int mi = N + 1; vector v; rep(i, 0, M) { int cnt = 0; rep(j, 0, N) { if (S[i][j] == '1') cnt++; } if (cnt < mi) { mi = cnt; v = {(int)i}; } else if (cnt == mi) { v.push_back(i); } } assert(!v.empty()); if (mi == 0 || (int)v.size() > 1) { cout << "No\n"; } else { if (M != (1 << (N - mi))) { cout << "No\n"; return; } int at = v[0]; rep(i, 0, N) { if (i == at) continue; rep(j, 0, N) { if (S[at][j] == '1' && S[i][j] == '0') { cout << "No\n"; return; } } } cout << "Yes\n"; } } int main() { solve(); }