#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
vector<int> G[maxn], T[maxn];
vector<int> res;
int in[maxn], f[maxn];
int n, m;
void init() {
  for (int i = 0; i < maxn; i++) f[i] = i + 200000;
}
void solve() {
  init();
  int num = 0;
  for (int i = 1; i < n; i++) {
    int len = min(G[i - 1].size(), G[i].size());
    bool flag = false;
    for (int j = 0; j < len; j++) {
      if (G[i - 1][j] != G[i][j]) {
        T[G[i][j]].push_back(G[i - 1][j]);
        num++;
        in[G[i - 1][j]]++;
        flag = true;
        break;
      }
    }
    if (!flag && G[i].size() < G[i - 1].size()) {
      puts("No");
      return;
    }
  }
  queue<int> q;
  int cnt = 0;
  for (int i = 1; i <= m; i++) {
    if (!in[i]) {
      q.push(i);
      cnt++;
    }
  }
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = 0; i < T[u].size(); i++) {
      int v = T[u][i];
      in[v]--;
      if (f[v] > f[u]) {
        f[v] -= 200000;
        if (f[v] > f[u]) {
          puts("No");
          return;
        }
        res.push_back(v);
      }
      if (!in[v]) {
        cnt++;
        q.push(v);
      }
    }
  }
  if (cnt < m) {
    puts("No");
    return;
  }
  printf("Yes\n%d\n", res.size());
  for (int i = 0; i < res.size(); i++) {
    printf("%d ", res[i]);
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    int t;
    scanf("%d", &t);
    for (int j = 0; j < t; j++) {
      int x;
      scanf("%d", &x);
      G[i].push_back(x);
    }
  }
  solve();
  return 0;
}
