#include <bits/stdc++.h>

using namespace std;

#define REP(i,n) for(ll (i) = (0);(i) < (n);++i)
#define REV(i,n) for(ll (i) = (n) - 1;(i) >= 0;--i)
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define FI first
#define SE second
#define SHOW1d(v,n) {REP(WW,n)cerr << v[WW] << ' ';cerr << endl << endl;}
#define SHOW2d(v,WW,HH) {REP(W_,WW){REP(H_,HH)cerr << v[W_][H_] << ' ';cerr << endl;}cerr << endl;}
#define ALL(v) v.begin(),v.end()
#define Decimal fixed<<setprecision(20)
#define INF 1000000000
#define LLINF 1000000000000000000LL
#define MOD 998244353

#define BIT_N 333
typedef long long ll;
typedef pair<ll,ll> P;
typedef bitset<BIT_N> Bit;
vector<int> baseNum;

ll pow_two[BIT_N];

vector<Bit> gauss(vector<Bit> &v, ll &ran){
	ran = 0;
	REP(i,BIT_N) {
		int pla = -1;
		for(int j = ran;j < v.size();j++){
			if(v[j][i] == 1){
				pla = j;
				break;
			}
		}
		
		if(pla != -1){
			swap(v[ran], v[pla]);
			for(int j = 0;j < v.size();j++){
				if(j != ran && v[j][i] == 1)v[j] ^= v[ran];
			}
			ran++;
		}
	}
	return v;
}

int main(){
	
	pow_two[0] = 1;
	REP(i,BIT_N - 1)pow_two[i+1] = pow_two[i] * 2 % MOD;
	
	vector<Bit> v;
	ll n, m;cin >> n >> m;
	REP(i,n){
		Bit now;
		REP(j,m){
			int a;cin >> a;
			if(a)now[j] = 1;
		}
		v.PB(now);
	}
	
	ll ran = 0;
	ll ans = 0;
	gauss(v, ran);
	
	cout << ((pow_two[n] - pow_two[n - ran] + MOD) % MOD) * pow_two[m-1] % MOD << endl;
	
	return 0;
}

### Prompt

Your task is to create 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 <bits/stdc++.h>

using namespace std;

#define REP(i,n) for(ll (i) = (0);(i) < (n);++i)
#define REV(i,n) for(ll (i) = (n) - 1;(i) >= 0;--i)
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define FI first
#define SE second
#define SHOW1d(v,n) {REP(WW,n)cerr << v[WW] << ' ';cerr << endl << endl;}
#define SHOW2d(v,WW,HH) {REP(W_,WW){REP(H_,HH)cerr << v[W_][H_] << ' ';cerr << endl;}cerr << endl;}
#define ALL(v) v.begin(),v.end()
#define Decimal fixed<<setprecision(20)
#define INF 1000000000
#define LLINF 1000000000000000000LL
#define MOD 998244353

#define BIT_N 333
typedef long long ll;
typedef pair<ll,ll> P;
typedef bitset<BIT_N> Bit;
vector<int> baseNum;

ll pow_two[BIT_N];

vector<Bit> gauss(vector<Bit> &v, ll &ran){
	ran = 0;
	REP(i,BIT_N) {
		int pla = -1;
		for(int j = ran;j < v.size();j++){
			if(v[j][i] == 1){
				pla = j;
				break;
			}
		}
		
		if(pla != -1){
			swap(v[ran], v[pla]);
			for(int j = 0;j < v.size();j++){
				if(j != ran && v[j][i] == 1)v[j] ^= v[ran];
			}
			ran++;
		}
	}
	return v;
}

int main(){
	
	pow_two[0] = 1;
	REP(i,BIT_N - 1)pow_two[i+1] = pow_two[i] * 2 % MOD;
	
	vector<Bit> v;
	ll n, m;cin >> n >> m;
	REP(i,n){
		Bit now;
		REP(j,m){
			int a;cin >> a;
			if(a)now[j] = 1;
		}
		v.PB(now);
	}
	
	ll ran = 0;
	ll ans = 0;
	gauss(v, ran);
	
	cout << ((pow_two[n] - pow_two[n - ran] + MOD) % MOD) * pow_two[m-1] % MOD << endl;
	
	return 0;
}

```