Problem: Problem

There are $ N $ Amidakuji with 3 vertical lines.
No matter which line you start from, the Amidakuji that ends at the starting line is considered a good Amidakuji.
You can select one or more Amidakuji and connect them vertically in any order.
Output "yes" if you can make a good Amidakuji, otherwise output "no".

There are $ w_i $ horizontal lines in the $ i $ th Amidakuji.
$ a_ {i, j} $ indicates whether the $ j $ th horizontal bar from the top of Amidakuji $ i $ extends from the central vertical line to the left or right.
If $ a_ {i, j} $ is 0, it means that it extends to the left, and if it is 1, it means that it extends to the right.

Constraints

The input satisfies the following conditions.

* $ 1 \ le N \ le 50 $
* $ 0 \ le w_i \ le 100 $
* $ a_ {i, j} $ is 0 or 1

Input

The input is given in the following format.


$ N $
$ w_1 $ $ a_ {1,1} $ $ a_ {1,2} $ ... $ a_ {1, w_1} $
$ w_2 $ $ a_ {2,1} $ $ a_ {2,2} $ ... $ a_ {2, w_2} $
...
$ w_N $ $ a_ {N, 1} $ $ a_ {N, 2} $ ... $ a_ {N, w_N} $


All inputs are given as integers.
$ N $ is given on the first line.
$ W_i $ and $ w_i $ $ a_ {i, j} $ are given on the following $ N $ line, separated by blanks.

Output

If you can make a good Amidakuji, it outputs "yes", otherwise it outputs "no".

Examples

Input

3
2 0 0
1 1
5 1 0 0 1 0


Output

yes


Input

2
1 1
1 0


Output

no

Solution (in CPP):

Solution:
#include<algorithm>
#include<map>
#include<iostream>
#include<vector>
using namespace std;
typedef long long lint;
typedef vector<int>vi;
typedef pair<int,int>pii;
#define rep(i,n)for(int i=0;i<(int)(n);++i)

int main(){
  int n;
  cin>>n;
  map<vi,int> f;
  vector<vi> pp;
  rep(i,n){
    int w;
    cin>>w;
    vi p(3);
    rep(j,3)p[j]=j;
    rep(j,w){
      int a;
      cin>>a;
      swap(p[a],p[a+1]);
    }
    f[p]++;
    pp.push_back(p);
  }
  if(n>=8){
    cout<<"yes"<<endl;
    return 0;
  }
  sort(pp.begin(),pp.end());
  do{
    vi acc(3);
    rep(i,3)acc[i]=i;
    rep(i,pp.size()){
      vi t(3);
      rep(j,3){
	t[j]=acc[pp[i][j]];
      }
      bool eq=1;
      rep(j,3)eq&=t[j]==j;
      if(eq){
	cout<<"yes"<<endl;
	return 0;
      }
      acc=t;
    }
  }while(next_permutation(pp.begin(),pp.end()));
  cout<<"no"<<endl;
}