package chelper; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import io.InputReader; import io.OutputWriter; import misc.SimpleSavingChelperSolution; public class E extends SimpleSavingChelperSolution { private int n; private int k; private int m; private int[] a; private int[] length; private int[] pos; private int[] next; private boolean[] fixed; private boolean[] changed; private int first; private boolean[] same; public void solve(int testNumber, InputReader in, OutputWriter out) { wrapSolve(testNumber, in, out); } @Override public void solve(int testNumber) { n = in.nextInt(); k = in.nextInt(); m = 100100; a = new int[m]; length = new int[n]; pos = new int[n]; int t = 0; next = new int[n]; for (int i = 0; i < n; i++) { length[i] = in.nextInt(); pos[i] = t; for (int j = 0; j < length[i]; j++) { a[t++] = in.nextInt() - 1; } next[i] = i + 1; } fixed = new boolean[k]; changed = new boolean[k]; first = 0; same = new boolean[n]; Arrays.fill(same, true); if (stuff()) { return; } Arrays.fill(same, true); for (int i = 0; i < n; i++) { next[i] = i + 1; } first = 0; if (stuff()) { return; } List ans = new ArrayList<>(); for (int i = 0; i < k; i++) { if (changed[i]) { ans.add(i); } } out.println("Yes"); out.println(ans.size()); for (int i : ans) { out.print((i + 1) + " "); } } private boolean stuff() { for (int i = 0; i < m; i++) { for (int p1 = first; p1 < n; p1 = next[p1]) { int p2 = next[p1]; if (p2 >= n) { break; } if (!same[p1]) { continue; } int o1 = a[pos[p1] + i]; int l1 = changed[o1] ? o1 - k : o1; int o2 = a[pos[p2] + i]; int l2 = changed[o2] ? o2 - k : o2; if (l1 < l2) { same[p1] = false; continue; } if (l1 == l2) { if (length[p1] > i + 1 && length[p2] == i + 1) { out.println("No"); return true; } } if (l1 > l2) { same[p1] = false; if (o1 < o2) { if (fixed[o1]) { out.println("No"); return true; } fixed[o1] = true; changed[o1] = true; } if (o1 > o2) { if ((!changed[o1] && fixed[o1]) || (changed[o2] && fixed[o2])) { out.println("No"); return true; } changed[o1] = true; changed[o2] = false; fixed[o1] = true; fixed[o2] = true; } } } while (first < n && length[first] - 1 == i) { first = next[first]; } for (int j = first; j < n; j = next[j]) { while (next[j] < n && length[next[j]] - 1 == i) { same[j] = false; next[j] = next[next[j]]; } } } return false; } }