Submission #1318974

#TimeUsernameProblemLanguageResultExecution timeMemory
1318974m.zeeshanrashidNorela (info1cup18_norela)C++20
100 / 100
311 ms396624 KiB
// #ifdef __AVX2__
// #pragma GCC target "avx2"
// #endif
// #pragma GCC optimize "O3"
// #pragma GCC optimize "unroll-loops"
#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp> 
// #include <ext/pb_ds/tree_policy.hpp> 
// using namespace __gnu_pbds; 
using namespace std;
#define int unsigned long long
#define elif else if
#define all(l) begin(l),end(l)
#define rall(l) rbegin(l),rend(l)
#define append push_back
#define print(l) for(auto i:l) cout<<i<<' '; cout<<endl;
#define pprint(a,b) cout<<a<<' '<<b<<endl;
#define inp(l) for(auto &i:l) cin>>i;
// #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define pai make_pair
#define endl "\n"
#define pii pair<int,int>
#define fi first
#define se second
#define vec vector

// const int mod=998244353;
const int mod1=998244353;
const int mod=1e9+7;
const int N=2e5+5;

int iter=1,itera=1;
void solve(){
	int n,m;
	cin>>n>>m;
	vec<int>a;
	for(int i=0;i<m;i++){
		int s;
		cin>>s;
		vec<int>b(s);
		inp(b);
		int x=0;
		for(auto i:b){
			int tem=1;
			tem=tem<<(i-1);
			x+=tem;
		}
		a.append(x);
	}
	int si=(1<<m);
	vec<int>dp(si,0);
	vec<int>val(si,0);
	vec<bool>vis(si,0);
	vis[0]=1;
	int ans=(1ll<<30)-1;
	int tem=1;
	tem=(tem<<n)-1;
	vec<int>pos={0};
	for(int i=0;i<m;i++){
		int v=(1ll<<i);
		for(auto x:pos){
			int g=x|v;
			dp[g]=dp[x]^a[i];
			vis[g]=1;
			if(dp[g]==tem){
				int cur1=__builtin_popcountll(g);
				int cur=__builtin_popcountll(ans);
				if(cur1<cur) ans=g;
				elif(cur1==cur){
					for(int i=0;i<m;i++){
						bool g1=(g>>i)&1;
						bool ans1=(ans>>i)&1;
						if(g1==ans1) continue;
						if(g1) ans=g;
						break;
					}
				}
			}
		}
		for(int i=0;i<v;i++) pos.append(pos[i]|v);
	}
	cout<<__builtin_popcountll(ans)<<endl;
	for(int i=1;i<=m;i++){
		if(ans&1) cout<<i<<' ';
		ans>>=1;
	}
}
signed main(){
	// freopen("","r",stdin);
	// freopen("","w",stdout);
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); 
	cout.tie(NULL);
	cout<<fixed<<setprecision(20);
	// cin>>itera;
	for(iter=1;iter<=itera;iter++) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...