/*
    Take me to church
    I'll worship like a dog at the shrine of your lies
    I'll tell you my sins and you can sharpen your knife
    Offer me that deathless death
    Good God, let me give you my life
*/
#include<bits/stdc++.h>
using namespace std;
const int N = 303, Mod = 998244353;
int n, m;
bitset < N > A[N];
inline int Power(int a, int b)
{
    int ret = 1;
    for (; b; b >>= 1, a = 1LL * a * a % Mod)
        if (b & 1) ret = 1LL * ret * a % Mod;
    return (ret);
}
int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i ++)
        for (int j = 0, a; j < m; j ++)
            scanf("%d", &a), A[i][j] = a;
    int r = 0;
    for (int i = 0; i < m; i ++)
    {
        for (int j = r; j < n && A[r][i] == 0; j ++)
            if (A[j][i]) swap(A[r], A[j]);
        if (r < n && A[r][i])
        {
            for (int j = 0; j < n; j ++)
                if (r != j && A[j][i])
                    A[j] ^= A[r];
            r ++;
        }
    }
    return !printf("%d\n", (Power(2, n + m - 1) - Power(2, n - 1 + m - r) + Mod) % Mod);
}
### Prompt

Your challenge is to write a CPP solution to the following problem:

There is a square grid with N rows and M columns. Each square contains an integer: 0 or 1. The square at the i-th row from the top and the j-th column from the left contains a_{ij}.

Among the 2^{N+M} possible pairs of a subset A of the rows and a subset B of the columns, find the number of the pairs that satisfy the following condition, modulo 998244353:

* The sum of the |A||B| numbers contained in the intersection of the rows belonging to A and the columns belonging to B, is odd.

Constraints

* 1 \leq N,M \leq 300
* 0 \leq a_{i,j} \leq 1(1\leq i\leq N,1\leq j\leq M)
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N M
a_{11} ... a_{1M}
:
a_{N1} ... a_{NM}


Output

Print the number of the pairs of a subset of the rows and a subset of the columns that satisfy the condition, modulo 998244353.

Examples

Input

2 2
0 1
1 0


Output

6


Input

2 3
0 0 0
0 1 0


Output

8

### Response

```cpp
/*
    Take me to church
    I'll worship like a dog at the shrine of your lies
    I'll tell you my sins and you can sharpen your knife
    Offer me that deathless death
    Good God, let me give you my life
*/
#include<bits/stdc++.h>
using namespace std;
const int N = 303, Mod = 998244353;
int n, m;
bitset < N > A[N];
inline int Power(int a, int b)
{
    int ret = 1;
    for (; b; b >>= 1, a = 1LL * a * a % Mod)
        if (b & 1) ret = 1LL * ret * a % Mod;
    return (ret);
}
int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i ++)
        for (int j = 0, a; j < m; j ++)
            scanf("%d", &a), A[i][j] = a;
    int r = 0;
    for (int i = 0; i < m; i ++)
    {
        for (int j = r; j < n && A[r][i] == 0; j ++)
            if (A[j][i]) swap(A[r], A[j]);
        if (r < n && A[r][i])
        {
            for (int j = 0; j < n; j ++)
                if (r != j && A[j][i])
                    A[j] ^= A[r];
            r ++;
        }
    }
    return !printf("%d\n", (Power(2, n + m - 1) - Power(2, n - 1 + m - r) + Mod) % Mod);
}
```