Source Code
//fold
#include <bits/stdc++.h>
using namespace std;
#define In_The_Name_Of_Allah_The_Merciful ios_base::sync_with_stdio(false);cin.tie(NULL);
#define Alhamdulillah return 0;
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define F_OR(i, a, b, s) for (int i = (a) ; i < (b) ; i += (s))
#define F_OR1(e) F_OR(i, 0, e, 1)
#define F_OR2(i, e) F_OR(i, 0, e, 1)
#define F_OR3(i, b, e) F_OR(i, b, e, (b)<(e)?1:-1)
#define F_OR4(i, b, e, s) F_OR(i, b, e, s)
#define GET5(a, b, c, d, e, ...) e
#define F_ORC(...) GET5(__VA_ARGS__, F_OR4, F_OR3, F_OR2, F_OR1)
#define lp(...) F_ORC(__VA_ARGS__)(__VA_ARGS__)
#define each(a,x) for (auto& a: x)
#define pb push_back
#define ins insert
#define sz(v) (int) v.size()
typedef long long ll;
typedef long double ld;
const long double PI = acos(-1);
const int di[8] = {0 , 0 , 1 , -1 , 1 , 1 , -1 , -1};
const int dj[8] = {1 , -1 , 0 , 0 , 1 , -1 , 1 , -1};

ll FirstTrue (ll l,ll r,function<bool(ll)>f){
  while(l<r){
  ll mid=l+(r-l)/2;
  f(mid)?r=mid:l=mid+1;} 
  return l;
}
ll LastTrue(ll l,ll r,function<bool(ll)>f){
  while(l<r){
  ll mid=l+(r-l+1)/2;
  f(mid)?l=mid:r=mid-1;} 
  return l;
}
 
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}

template<class T> void re(complex<T>& x);
template<class T1, class T2> void re(pair<T1,T2>& p);
template<class T> void re(vector<T>& a);
template<class T, size_t SZ> void re(array<T,SZ>& a);

template<class T> void re(T& x) { cin >> x; }
void re(double& x) { string t; re(t); x = stod(t); }
void re(ld& x) { string t; re(t); x = stold(t); }
template<class Arg, class... Args> void re(Arg& first, Args&... rest) { 
  re(first); re(rest...); 
}

template<class T> void re(complex<T>& x) { T a,b; re(a,b); x = complex<T>(a,b); }
template<class T1, class T2> void re(pair<T1,T2>& p) { re(p.first,p.second); }
template<class T> void re(vector<T>& a) { lp(i,sz(a)) re(a[i]); }
template<class T, size_t SZ> void re(array<T,SZ>& a) { lp(i,SZ) re(a[i]); }

template<class T1, class T2> void pr(const pair<T1,T2>& x);
template<class T, size_t SZ> void pr(const array<T,SZ>& x);
template<class T> void pr(const vector<T>& x);
template<class T> void pr(const set<T>& x);
template<class T1, class T2> void pr(const map<T1,T2>& x);

template<class T> void pr(const T& x) { cout << x; }
template<class Arg, class... Args> void pr(const Arg& first, const Args&... rest) { 
  pr(first); pr(rest...); 
}

template<class T1, class T2> void pr(const pair<T1,T2>& x) { 
  pr(x.first,' ',x.second); 
}
template<class T> void prContain(const T& x) {
  each(a,x) pr(a,' '); 
}
template<class T, size_t SZ> void pr(const array<T,SZ>& x) { prContain(x); }
template<class T> void pr(const vector<T>& x) { prContain(x); }
template<class T> void pr(const set<T>& x) { prContain(x); }
template<class T1, class T2> void pr(const map<T1,T2>& x) { prContain(x); }

void ps() { cout << '\n'; } 
template<class Arg, class... Args> void ps(const Arg& first, const Args&... rest) { 
  pr(first," "); ps(rest...);
}    

string to_string(const string& s) {
  return '"' + s + '"';
}
 
string to_string(const char* s) {
  return to_string((string) s);
}
 
string to_string(const char& c) {
  char s[1] = {c};
  return to_string(s);
}
 
string to_string(bool b) {
  return (b ? "true" : "false");
}
 
string to_string(vector<bool> v) {
  bool first = true;
  string res = "{";
  for (int i = 0; i < static_cast<int>(v.size()); i++) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(v[i]);
  }
  res += "}";
  return res;
}
 
template <size_t N>
string to_string(bitset<N> v) {
  string res = "";
  for (size_t i = 0; i < N; i++) {
    res += static_cast<char>('0' + v[i]);
  }
  return res;
}
 
template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto &x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}
 
template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}
 
template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p) {
  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ")";
}
 
template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p) {
  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ", " + to_string(get<3>(p)) + ")";
}
 
void DBG() {
    cerr << "]" << endl;
}
template<class H, class... T> void DBG(H h, T... t) {
  cerr << to_string(h);
  if(sizeof...(t))
      cerr << ", ";
  DBG(t...);
}

#ifndef ONLINE_JUDGE
#define debug(...) cerr << "[" << #__VA_ARGS__ << "] : [", DBG(__VA_ARGS__)
#else
#define debug(...) 0
#endif
//endfold



void Suhaib_Sawalha (){

  int n, m;
  re(n, m);
  vector<set<array<int, 2>>> adj(m);
  vector<vector<int>> idx(m);
  lp(n) {
    int k;
    re(k);
    vector<int> c(k);
    re(c);
    sort(all(c));
    each(e, c) --e;
    if (sz(c) > 1) {
      adj[c[0]].ins({c[1], i});
      adj[c[1]].ins({c[0], i});
    }
    else {
      idx[c[0]].pb(i);
    }
  }
  vector<int> ans;
  function<void(int, int)> solve = [&] (int x, int p) {
    each(e, idx[x]) ans.pb(e + 1);
    idx[x].clear();
    auto it = adj[x].begin();
    while (it != adj[x].end()) {
      if ((*it)[0] != p) {
        ++it;
        continue;
      }
      auto it2 = it;
      ++it2;
      adj[x].erase(it);
      it = adj[x].begin();
    }
    if (sz(adj[x])) {
      int y = (*adj[x].begin())[0];
      each(e, adj[x]) {
        if (e[0] != y) {
          pr(-1);
          exit(0);
        }
        ans.pb(e[1] + 1);
      }
      adj[x].clear();
      solve(y, x);
    }
  };
  lp(m) {
    if (adj[i].size() < 2) {
      solve(i, -1);
    }
  }
  if (sz(ans) == n) pr(ans);
  else pr(-1);

}

int main(){
                                In_The_Name_Of_Allah_The_Merciful   /* بسم الله الرحمن الرحيم  */
#ifndef ONLINE_JUDGE
    freopen("SuhaibSawalha1","r",stdin);
#endif
// int _;cin>>_;for(int i=1;i<=_;++i,cout<<'\n')
        // cout<<"Case #"<<i<<":\n", 
        Suhaib_Sawalha();
                                         Alhamdulillah                    /* الحمد لله */
}
Copy
Gym SuhaibSawalha1
GNU G++17
0 ms
640 KB
Wrong Answer