#include using namespace std; using ll = long long; bool subseteq(set & a, set & b) { for(auto i : a) if(b.find(i) == b.end()) return false; return true; } int main() { int n, m; cin >> n >> m; vector> p(n); vector>> s(m); for(int i = 0; i < n; i++) { int k; cin >> k; for(int j = 0; j < k; j++) { int x; cin >> x; x--; s[x].push_back({k, i}); p[i].insert(x); } } for(int i = 0; i < m; i++) { sort(s[i].begin(), s[i].end()); } vector valid(n, -1); for(int i = 0; i < m; i++) { int prev = -1; for(auto [cnt, id] : s[i]) { if(prev != -1 && (valid[prev] == -1 || valid[id] == -1)) { if(!subseteq(p[prev], p[id])) { cout << "YES" << endl << prev + 1 << " " << id + 1 << endl; return 0; } } prev = id; } for(auto [cnd, id] : s[i]) { if(valid[id] == -1) { valid[id] = i; } } prev = -1; for(auto [cnt, id] : s[i]) { if(prev == -1) { prev = id; continue; } if(valid[prev] != valid[id]) { if(valid[prev] < valid[id]) { cout << "YES" << endl << id + 1 << " " << prev + 1 << endl; return 0; } else { if(p[id].find(valid[prev]) == p[id].end()) { cout << "YES" << endl << id + 1 << " " << prev + 1 << endl; return 0; } } } prev = id; } } cout << "NO" << endl; }