// 25' AC
#include<bits/stdc++.h>
using namespace std;
const int N=1111;
vector<int> vv[N];
double in[2][N];
int sex[N];
set<int> st1,st2;
set<int>::iterator it;
int read() // 特殊处理 -0
{
int ans=0,f=1;
char ch=getchar();
while( !( ch>='0' && ch<='9' ) )
{
if( ch=='-' ) f=-1;
ch=getchar();
}
while( ch>='0' && ch<='9' )
{
ans=( ans<<1 )+( ans<<3 )+( ch-'0' );
ch=getchar();
}
sex[ans]=( f==1?1:0 );
return ans;
}
int main()
{
double tt;
int n,m,i,j,k,a,b,f1,f2;
while( cin>>n>>m )
{
for( i=0;i<m;i++ )
{
cin>>k; // 记得调大小
vv[i].resize(k);
for( j=0;j<k;j++ ) vv[i][j]=read();
}
a=read(); b=read();
for( i=0;i<m;i++ ) // 只算有效的数据 不然会 TLE!
{ // vector not v.find()
if( find( vv[i].begin(),vv[i].end(),a )!=vv[i].end() )
for( j=0;j<vv[i].size();j++ )
{
if( vv[i][j]==a ) continue;
in[0][vv[i][j]]+=(double)1/vv[i].size();
}
if( find( vv[i].begin(),vv[i].end(),b )!=vv[i].end() )
for( j=0;j<vv[i].size();j++ )
{
if( vv[i][j]==b ) continue;
in[1][vv[i][j]]+=(double)1/vv[i].size();
}
} // 【vv[i][j]】 +=
f1=f2=0; // 忘记初始化.
tt=0; st1.clear();
for( i=0;i<n;i++ ) // 算 pa_max
{
if( i==a ) continue;
if( in[0][i]>tt && sex[a]+sex[i]==1 )
{ //
st1.clear(); tt=in[0][i]; st1.insert( i );
}
else if( in[0][i]==tt && sex[a]+sex[i]==1 )
{
st1.insert( i );
}
}
if( st1.find(b)!=st1.end() ) f1=1;
tt=0; st2.clear();
for( i=0;i<n;i++ ) // 算 pb_max
{
if( i==b ) continue;
if( in[1][i]>tt && sex[b]+sex[i]==1 )
{
st2.clear(); tt=in[1][i]; st2.insert( i );
}
else if( in[1][i]==tt && sex[b]+sex[i]==1 )
{
st2.insert( i );
}
}
if( st2.find(a)!=st2.end() ) f2=1;
if( f1+f2==2 ) // 彼此亲密度最高
{ // ==0 "-"
if( sex[a]==0 ) cout<<"-"; cout<<a<<" ";
if( sex[b]==0 ) cout<<"-"; cout<<b<<endl;
continue;
} // 样例都检查一遍
for( it=st1.begin();it!=st1.end();it++ )
{
if( sex[a]==0 ) cout<<"-"; cout<<a<<" ";
if( sex[(*it)]==0 ) cout<<"-"; cout<<(*it)<<endl;
}
for( it=st2.begin();it!=st2.end();it++ )
{
if( sex[b]==0 ) cout<<"-"; cout<<b<<" ";
if( sex[(*it)]==0 ) cout<<"-"; cout<<(*it)<<endl;
}
}
return 0;
}
// 17' 算出所有关系会 TLE
#include<bits/stdc++.h>
using namespace std;
const int N=1111;
double in[N][N];
int sex[N];
vector<int> v;
set<int> st1,st2;
set<int>::iterator it;
int main()
{
stringstream ss;
string s;
double tt;
int n,m,k,i,j,a,b,id,f1,f2;
while( cin>>n>>m )
{
memset( in,0,sizeof( in ) );
memset( sex,0,sizeof( sex ) );
while( m-- )
{
cin>>k; v.clear();
for( i=0;i<k;i++ )
{
cin>>s;
ss.clear(); ss.str("");
ss<<s; ss>>id; // 命名冲突修改了变量值
id=abs( id );
if( s[0]=='-' ) sex[id]=0;
else sex[id]=1;
v.push_back( id );
}
for( i=0;i<v.size();i++ ) // 上次只加了一个人的
for( j=i+1;j<v.size();j++ )
{
in[v[i]][v[j]]+=(double)1/k; // v[i] 不是 i 本身 !!!
in[v[j]][v[i]]+=(double)1/k;
}
}
cin>>a; a=abs( a );
cin>>b; b=abs( b );
f1=f2=0;
tt=in[a][b]; st1.clear(); // pa
for( i=0;i<n;i++ )
{
if( i==a ) continue;
if( in[a][i]>tt && sex[a]+sex[i]==1 )
{
st1.clear(); tt=in[a][i]; st1.insert( i );
}
else if( in[a][i]==tt && sex[a]+sex[i]==1 )
{
st1.insert( i );
}
}
if( st1.find( b )!=st1.end() ) f1=1;
tt=in[a][b]; st2.clear(); // pb
for( i=0;i<n;i++ )
{
if( i==b ) continue;
if( in[b][i]>tt && sex[b]+sex[i]==1 )
{
st2.clear(); tt=in[b][i]; st2.insert( i );
}
else if( in[b][i]==tt && sex[b]+sex[i]==1 )
{
st2.insert( i );
}
}
if( st2.find( a )!=st2.end() ) f2=1;
if( f1+f2==2 )
{
if( sex[a]==0 ) cout<<"-"; cout<<a<<" ";
if( sex[b]==0 ) cout<<"-"; cout<<b<<endl;
continue;
}
for( it=st1.begin();it!=st1.end();it++ ) // pa
{
if( sex[a]==0 ) cout<<"-"; cout<<a<<" ";
if( sex[(*it)]==0 ) cout<<"-"; cout<<(*it)<<endl;
}
for( it=st2.begin();it!=st2.end();it++ ) // pb
{
if( sex[b]==0 ) cout<<"-"; cout<<b<<" ";
if( sex[(*it)]==0 ) cout<<"-"; cout<<(*it)<<endl;
}
}
return 0;
}