#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define MOD(x) ((x) >= mod ? (x) - mod : (x))
#define ll long long
using namespace std;
const int maxn = 510, inf = 1e9 + 233, mod = 998244353;
int n, m, ans, cnt;
int a[maxn], b[maxn][maxn];

template<typename T>
inline void read(T &k)
{
	int f = 1; k = 0; char c = getchar();
	while (c < '0' || c > '9') c == '-' && (f = -1), c = getchar();
	while (c <= '9' && c >= '0') k = k * 10 + c - '0', c = getchar();
	k *= f;
}

inline int power(int a, int b)
{
	int ans = 1; 
	for (; b; b >>= 1, a = 1ll * a * a % mod)
		if (b & 1) ans = 1ll * ans * a % mod;
	return ans;
}

int main()
{
	read(n); read(m); 
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
			read(a[j]);

		bool flag = 1;
		for (int j = 1; j <= m; j++)
			if (a[j])
			{
				if (b[j][0])
				{
					for (int k = 1; k <= m; k++)
						a[k] ^= b[j][k];
				}
				else
				{
					b[j][0] = 1;
					for (int k = 1; k <= m; k++)
						b[j][k] = a[k];

					flag = 0;
					break;
				}
			}

		cnt += flag;
	}

	ans = power(2, n) - power(2, cnt) + mod; ans = MOD(ans);
	printf("%lld\n", 1ll * ans * power(2, m - 1) % 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
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define MOD(x) ((x) >= mod ? (x) - mod : (x))
#define ll long long
using namespace std;
const int maxn = 510, inf = 1e9 + 233, mod = 998244353;
int n, m, ans, cnt;
int a[maxn], b[maxn][maxn];

template<typename T>
inline void read(T &k)
{
	int f = 1; k = 0; char c = getchar();
	while (c < '0' || c > '9') c == '-' && (f = -1), c = getchar();
	while (c <= '9' && c >= '0') k = k * 10 + c - '0', c = getchar();
	k *= f;
}

inline int power(int a, int b)
{
	int ans = 1; 
	for (; b; b >>= 1, a = 1ll * a * a % mod)
		if (b & 1) ans = 1ll * ans * a % mod;
	return ans;
}

int main()
{
	read(n); read(m); 
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
			read(a[j]);

		bool flag = 1;
		for (int j = 1; j <= m; j++)
			if (a[j])
			{
				if (b[j][0])
				{
					for (int k = 1; k <= m; k++)
						a[k] ^= b[j][k];
				}
				else
				{
					b[j][0] = 1;
					for (int k = 1; k <= m; k++)
						b[j][k] = a[k];

					flag = 0;
					break;
				}
			}

		cnt += flag;
	}

	ans = power(2, n) - power(2, cnt) + mod; ans = MOD(ans);
	printf("%lld\n", 1ll * ans * power(2, m - 1) % mod);
}
```