func_code_string: #include <bits/stdc++.h>   clock_t __t = clock();   namespace my_std {   using namespace std;   mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());   template <typename T>   inline T rnd(T l, T r) {     return uniform_int_distribution<T>(l, r)(rng);   }   template <typename T>   inline bool chkmax(T &x, T y) {     return x < y ? x = y, 1 : 0;   }   template <typename T>   inline bool chkmin(T &x, T y) {     return x > y ? x = y, 1 : 0;   }   template <typename T>   inline void read(T &t) {     t = 0;     char f = 0, ch = getchar();     double d = 0.1;     while (ch >  9  || ch <  0 ) f |= (ch ==  - ), ch = getchar();     while (ch <=  9  && ch >=  0 ) t = t * 10 + ch - 48, ch = getchar();     if (ch ==  . ) {       ch = getchar();       while (ch <=  9  && ch >=  0 ) t += d * (ch ^ 48), d *= 0.1, ch = getchar();     }     t = (f ? -t : t);   }   template <typename T, typename... Args>   inline void read(T &t, Args &...args) {     read(t);     read(args...);   }   char __sr[1 << 21], __z[20];   int __C = -1, __zz = 0;   inline void Ot() { fwrite(__sr, 1, __C + 1, stdout), __C = -1; }   inline void print(int x) {     if (__C > 1 << 20) Ot();     if (x < 0) __sr[++__C] =  - , x = -x;     while (__z[++__zz] = x % 10 + 48, x /= 10)       ;     while (__sr[++__C] = __z[__zz], --__zz)       ;     __sr[++__C] =   n ;   }   void file() {}   inline void chktime() {}   long long ksm(long long x, int y) {     long long ret = 1;     for (; y; y >>= 1, x = x * x)       if (y & 1) ret = ret * x;     return ret;   }   }  // namespace my_std   using namespace my_std;   int n, m;   char a[20][1100000];   long long c[1100000], w[1100000];   void FWT(long long *a) {     long long x, y;     for (int i = (0); i <= (n - 1); i++)       for (int j = (0); j <= ((1 << n) - 1); j++)         if (j >> i & 1)           x = a[1 << i ^ j], y = a[j], a[1 << i ^ j] = x + y, a[j] = x - y;   }   void iFWT(long long *a) {     long long x, y;     for (int i = (0); i <= (n - 1); i++)       for (int j = (0); j <= ((1 << n) - 1); j++)         if (j >> i & 1)           x = a[1 << i ^ j], y = a[j], a[1 << i ^ j] = x + y, a[j] = x - y;     for (int j = (0); j <= ((1 << n) - 1); j++) a[j] >>= n;   }   int main() {     file();     read(n, m);     for (int i = (0); i <= (n - 1); i++) cin >> (a[i] + 1);     for (int j = (1); j <= (m); j++) {       int x = 0;       for (int i = (0); i <= (n - 1); i++) x += int(a[i][j] -  0 ) << i;       ++c[x];     }     for (int i = (0); i <= ((1 << n) - 1); i++)       w[i] = min(__builtin_popcount(i), n - __builtin_popcount(i));     FWT(c), FWT(w);     for (int i = (0); i <= ((1 << n) - 1); i++) w[i] = w[i] * c[i];     iFWT(w);     long long ans = n * m;     for (int i = (0); i <= ((1 << n) - 1); i++) chkmin(ans, w[i]);     cout << ans;     return 0;   }   