连续数组
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}给你 q 个数组,其中第 i 个数组中的元素个数为 k_i。现在我们需要将这些数组全部组合成一个新的数组 A,但要保证每个数在原来的数组中的相对顺序不变,如果可以通过一些组合方式,使得新数组 A连续数组,则我们认为其为好数组。

\hspace{15pt}对于一个由 n 个元素组成的数组 \{a_1,a_2,\dots,a_n\},如果对于任意的 i \left(1 \lt i \leq n\right),都满足 a_i-a_{i - 1}=1,则我们认为该数组为连续数组。例如:\{2,3,4\}\{1,2,3,4\} 就是一个连续数组,而 \{1,3,4\} 则不是。

输入描述:

\hspace{15pt}第一行输入一个整数 q\left(1\leq q\leq 10^5\right) 代表数组的数目。 
\hspace{15pt}此后 q 行,第 i 行先输入一个整数 k_i\left(1\leq k_i\leq 10^5\right) 代表第 i 个数组的长度;随后在同一行输入 k_i 个整数 a_{i,1},a_{i,2},\dots,a_{i,k_i} \left(1\leq a_{i,j}\leq 10^9\right),代表该数组的 k_i 个元素。

\hspace{15pt}除此之外,保证单个测试文件的 k 之和不超过 10^5

输出描述:

\hspace{15pt}如果存在一种组合方式,使得新数组 A 为连续数组,则输出 \rm YES;否则输出 \rm NO

\hspace{15pt}注意,输出均为大写字母。
示例1

输入

复制
3
3 2 5 6
2 3 7
4 4 8 9 10

输出

复制
YES

说明

\hspace{15pt}在这个样例中,使用红色表示第一个数组 \{{\color{red}{2}},{\color{red}{5}},{\color{red}{6}}\},紫色表示第二个数组 \{{\color{purple}{3}},{\color{purple}{7}}\},橙色表示第三个数组 \{{\color{orange}{4}},{\color{orange}{8}},{\color{orange}{9}},{\color{orange}{10}}\}
\hspace{15pt}可以得到数组 \{{\color{red}{2}},{\color{purple}{3}},{\color{orange}{4}},{\color{red}{5}},{\color{red}{6}},{\color{purple}{7}},{\color{orange}{8}},{\color{orange}{9}},{\color{orange}{10}}\},是一个连续数组。
示例2

输入

复制
3
1 5
1 4
1 3

输出

复制
YES

说明

\hspace{15pt}在这个样例中,可以得到 \{3,4,5\},是一个连续数组。
示例3

输入

复制
3
3 1 2 3
3 4 5 6
1 1

输出

复制
NO

说明

\hspace{15pt}在这个样例中,由于存在两个 1,所以无论如何组合,都无法得到连续数组。
示例4

输入

复制
2
3 2 4 5
2 1 6

输出

复制
NO

说明

\hspace{15pt}在这个样例中,由于缺少 3,所以无论如何组合,都无法得到连续数组。