Problem p03133 (C++)

Buggy submission (status: Runtime Error):
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
const int mod = 998244353;
int n, m, a[310][310];
int od[310], ev[310], bit[310], xxj[310];
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      cin >> a[i][j], a[i][j] &= 1;
  /*	if(n<m)
          {
                  for(int i=1;i<=n;i++)
                          for(int j=i+1;j<=m;j++)
                                  swap(a[i][j],a[j][i]);
                  swap(n,m);
          }
  */
  /*	for(int i=1;i<=n;i++,puts(""))
                  for(int j=1;j<=m;j++)
                          printf("%d ",a[i][j]);
  */

  int u = max(n, m);
  od[1] = 1;
  ev[1] = 3;
  for (int i = 2; i <= u; i++) {
    od[i] = (ev[i - 1] + 3ll * od[i - 1] % mod) % mod;
    ev[i] = (od[i - 1] + 3ll * ev[i - 1] % mod) % mod;
  }
  int cnt = 0;
  /*	for(int i=1;i<=u;i++)
          {
                  int p=i;
                  for(int j=i+1;j<=u;j++)
                          if(a[i][i]<a[j][i]) p=j;
                  if(p!=i) swap(a[p],a[i]);
                  if(!a[i][i]) continue;
                  cnt++;
                  for(int j=i+1;j<=u;j++)
                          if(a[j][i])
                                  for(int k=i;k<=u;k++)
                                          a[j][k]^=a[i][k];
          }
  */
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++)
      if (a[i][j]) {
        if (xxj[j])
          for (int k = j; k <= m; j++)
            a[i][k] ^= a[xxj[j]][k];
        else {
          xxj[j] = i;
          cnt++;
          break;
        }
      }
  }
  bit[0] = 1;
  for (int i = 1; i <= u; i++)
    bit[i] = 2ll * bit[i - 1] % mod;
  int bs = 1ll * bit[n - cnt] * bit[m - cnt] % mod;
  printf("%lld\n", 1ll * od[cnt] * bs % mod);
}


Fixed submission:
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
const int mod = 998244353;
int n, m, a[310][310];
int od[310], ev[310], bit[310], xxj[310];
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      cin >> a[i][j], a[i][j] &= 1;
  /*	if(n<m)
          {
                  for(int i=1;i<=n;i++)
                          for(int j=i+1;j<=m;j++)
                                  swap(a[i][j],a[j][i]);
                  swap(n,m);
          }
  */
  /*	for(int i=1;i<=n;i++,puts(""))
                  for(int j=1;j<=m;j++)
                          printf("%d ",a[i][j]);
  */

  int u = max(n, m);
  od[1] = 1;
  ev[1] = 3;
  for (int i = 2; i <= u; i++) {
    od[i] = (ev[i - 1] + 3ll * od[i - 1] % mod) % mod;
    ev[i] = (od[i - 1] + 3ll * ev[i - 1] % mod) % mod;
  }
  int cnt = 0;
  /*	for(int i=1;i<=u;i++)
          {
                  int p=i;
                  for(int j=i+1;j<=u;j++)
                          if(a[i][i]<a[j][i]) p=j;
                  if(p!=i) swap(a[p],a[i]);
                  if(!a[i][i]) continue;
                  cnt++;
                  for(int j=i+1;j<=u;j++)
                          if(a[j][i])
                                  for(int k=i;k<=u;k++)
                                          a[j][k]^=a[i][k];
          }
  */
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++)
      if (a[i][j]) {
        if (xxj[j])
          for (int k = j; k <= m; k++)
            a[i][k] ^= a[xxj[j]][k];
        else {
          xxj[j] = i;
          cnt++;
          break;
        }
      }
  }
  bit[0] = 1;
  for (int i = 1; i <= u; i++)
    bit[i] = 2ll * bit[i - 1] % mod;
  int bs = 1ll * bit[n - cnt] * bit[m - cnt] % mod;
  printf("%lld\n", 1ll * od[cnt] * bs % mod);
}