#include #include #include #include using namespace std; #define FOR_EACH(p,q,r) for(p=q;p!=r;p++) typedef vector ivec_t; typedef vector imat_t; typedef unsigned long long state_t; const int DAY_MAX=30; const int NO=INT_MAX/2; string ToBin(state_t a) { string ans(""); int i; for(i = 0 ; i < 15 ;i++) { ans = (char)((a&1) + '0') + ans; a >>= 1; } return ans; } int Solve(imat_t& isfreeday) { int i,j,k,n = isfreeday.size(); vector prev_states(n,1); state_t finished_state = (1LL << n)-1; FOR_EACH(i,0,n){ prev_states[i] <<= i; cout << ToBin(prev_states[i]) << ' ' ; } cout << endl; FOR_EACH(i,0,DAY_MAX){ vector next_states(prev_states); cout << "day " << i << endl; FOR_EACH(j,0,n){ cout << "Index " << j << endl; FOR_EACH(k,0,n){ if(isfreeday[j][i] && isfreeday[k][i]){ cout << k << " -> " << j << endl; next_states[j] |= prev_states[k]; } } cout << ToBin(next_states[j]) << endl; if(next_states[j] == finished_state){ return i+1; } } prev_states.swap(next_states); } return -1; } int main() { int n,i,j,tmp; while(cin >> n , n) { imat_t isfreeday(n,ivec_t(DAY_MAX,0)); FOR_EACH(i,0,n){ cin >> tmp; while(tmp--){ cin >> j; isfreeday[i][j-1] = 1; } } cout << Solve(isfreeday) << endl; } return 0; }