#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=1011;
const LL mod=1000000007ll;
LL fac[N*2],ifac[N*2],h[N],inv[N*2];
void prepCalc(int n)
{
	fac[0]=1;for (int i=1;i<=n;i++) fac[i]=fac[i-1]*i%mod;
	inv[1]=1;for(int i=2;i<=n;i++) inv[i] = (mod-mod/i)*inv[mod%i]%mod;
	ifac[1]=1;for (int i=2;i<=n;i++) ifac[i]=ifac[i-1]*inv[i]%mod;
	
	h[0]=1;
	for (int i=1;i<=n/2;i++) h[i]=fac[i*2]*ifac[i]%mod*ifac[i]%mod*inv[i+1]%mod;
}
int n;
LL f[N][N];
int ls[N],rs[N],fa[N],num;
int co[N];
int cntc[N],cntn[N],cnt[N];
void work(int tcase)
{
	num=1;co[1]=1;
	memset(ls,0,sizeof(ls));
	memset(rs,0,sizeof(rs));
	memset(cntc,0,sizeof(cntc));
	memset(cntn,0,sizeof(cntn));
	int tp,x,now;
	now=1;
	for (int i=1;i<=n;i++)
	{
		scanf("%d",&tp);
		if (tp<3)
		{
			if (tp==0) now=fa[now];
			if (tp==1)
			{
				if (ls[now]==0)
				{
					ls[now]=++num;
					fa[num]=now;
					co[num]=co[now];
				}
				now=ls[now];
			}
			if (tp==2)
			{
				if (rs[now]==0)
				{
					rs[now]=++num;
					fa[num]=now;
					co[num]=co[now];
				}
				now=rs[now];
			}
		}
		else
		{
			scanf("%d",&x);
			if (tp==3)
			{
				ls[now]=++num;
				fa[num]=now;
				co[num]=num;
				cnt[num]=x;
			}
			if (tp==4)
			{
				rs[now]=++num;
				fa[num]=now;
				co[num]=num;
				cnt[num]=x;
			}
		}
	}
	
	for (int i=1;i<=num;i++)
	{
		cntn[co[i]]++;
		if (ls[i]==0) cntc[co[i]]++;
		if (rs[i]==0) cntc[co[i]]++;
	}
	
	LL ans=1ll;
	for (int i=2;i<=num;i++)
	{
		if(cntn[i]==0) continue;
		ans=ans*f[cntc[i]][cnt[i]-cntn[i]]%mod;
		//cout<<i<<" "<<cntc[i]<<" "<<cnt[i]<<" "<<cntn[i]<<endl;
	}
	printf("Case #%d: %lld\n",tcase,ans);
}
int main()
{
	prepCalc(1000);
	memset(f,0,sizeof(f));
	f[0][0]=1;
	for (int i=1;i<=510;i++)
	{
		for (int j=0;j<=510;j++)
		{
			for (int k=0;k+j<=510;k++)
			{
				f[i][j+k]+=f[i-1][j]*h[k];
				f[i][j+k]%=mod;
			}
		}
	}
	/*for (int i=1;i<=10;i++)
	{
		for (int j=1;j<=10;j++)
		{
			cout<<f[i][j]<<" ";
		}
		cout<<endl;
	}*/
	int T=0;
	while (scanf("%d",&n)!=EOF) work(++T);
}
