/*
TASK:CARS
LANG:C++
*/
#include<iostream>

using namespace std;

struct krust
{
	int num;
	krust *next;
} a[500000];

int n,rod[500000];
unsigned long put[500000];

void f(int p)
{
	int i;
	krust *q=a[p].next;
	for(i=0;i<a[p].num;i++)
	{
		put[q->num]++;
		f(q->num);
		q=q->next;
	}
}

int main()
{
	int i,j,sum;
	krust *p,*t;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>a[i].num;
		j=0;
		p=&a[i];
		while(j<a[i].num)
		{
			j++;
			t=new krust;
			cin>>t->num;
			t->num--;
			rod[t->num]++;
			p->next=t;
			t->next=NULL;
			p=p->next;
		}
	}
	for(i=0;i<n&&rod[i]!=0;i++);
	put[i]=1;

	f(i);
	for(i=0;i<n&&a[i].num!=0;i++);

	sum=put[i]%987654321;
	cout<<sum<<endl;
	return 0;
}