#include<iostream>
#include<vector>
#include<cmath>
#include<queue>
#include<functional>
#include<algorithm>
#include<string>
#include<set>
#include<cstring>
 
using namespace std;
 

int main(void)
{
	
	int n;
	while(cin>>n,n){
		vector<set<int> > dp(n);
		vector<vector<int> > vf(n);
		
		for(int i=0;i<n;i++) dp[i].insert(i);



		for(int i=0;i<n;i++){
			int m;
			cin>>m;
			for(int j=0;j<m;j++){
				int f;
				cin>>f;
				vf[i].push_back(f);
			}
			sort(vf[i].begin(),vf[i].end());
		}
		
		int res=-1;
		for(int i=1;i<=30 && res==-1;i++){
			vector<int> meet;
			set<int> update;
			for(int j=0;j<n;j++){
				if(binary_search(vf[j].begin(),vf[j].end(),i)){
					meet.push_back(j);
					for(auto it=dp[j].begin();it!=dp[j].end();it++)	update.insert(*it);
				}
			}
			
			for(int j=0;j<meet.size();j++){

				dp[meet[j]]=update;

			}
			for(int j=0;j<n;j++){
				if(dp[j].size()>=n) res=i;
			}
		}
		cout<<res<<endl;

	}
	
	return 0;
}