#include using namespace std; #define rep(i,a,b) for (int i = (a); i < (b);++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() typedef long long ll; typedef pair pii; typedef vector vi; signed main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int n, k; cin >> n >> k; srand(42); vector> vals(n); rep(i,0,n) { int c; cin >> c; vals[i]= {vi(c), i + 1 }; rep(j,0,c) cin >> vals[i].first[j]; sort(all(vals[i].first)); } sort(all(vals)); vi mapping(k + 1, -1); int a = -1; int b = -1; int last = 0; int lastc = 0; rep(i,1,n + 1) { bool valid = i == n; if (i == n) goto fuck; rep(z, 0, lastc+1) { if (sz(vals[i].first) == z || sz(vals[i-1].first) == z || vals[i].first[z] != vals[i-1].first[z]) { lastc = z; valid = true; } } fuck: if (!valid) { lastc++; continue; } rep(j,0,sz(vals[i-1].first) - 1) { int el = vals[i-1].first[j]; if (mapping[el] != -1) { cerr << "f" << el << endl; a = vals[mapping[el]].second; b = vals[i-1].second; goto woohoo; } } rep(x, last, i) { int lel = vals[x].first[sz(vals[x].first) - 1]; cerr << "x " << x << endl; if (mapping[lel] != -1) { int imi = mapping[lel]; int fpt = 0; int spt = 0; int fadd = 0; int sadd = 0; while(fpt != sz(vals[x].first) && spt != sz(vals[imi].first)) { if (vals[x].first[fpt] < vals[imi].first[spt]) { fadd = 1; fpt++; } else if (vals[x].first[fpt] > vals[imi].first[spt]) { sadd = 1; spt++; } else { spt++; fpt++; } } if (fadd && sadd) { cerr << lel << endl; a = vals[x].second; b = vals[imi].second; goto woohoo; } } mapping[lel] = x; } last = i; continue; } woohoo:; if (a == -1) { cout << "NO" << endl; } else { cout << "YES" << endl; cout << a << " " << b << endl; } return 0; }