#include<bits/stdc++.h>
using namespace std;
#define MAX_V 500
int V;
vector<int> G[MAX_V],rG[MAX_V],vs,vG[MAX_V];
bool used[MAX_V];
int cmp[MAX_V];
void add_edge(int from,int to){
  G[from].push_back(to);
  rG[to].push_back(from);
}
void dfs(int v){
  used[v]=1;
  for(int i=0;i<G[v].size();i++){
    if(!used[G[v][i]]) dfs(G[v][i]);
  }
  vs.push_back(v);
}
void rdfs(int v,int k){
  used[v]=1;
  cmp[v]=k;
  vG[k].push_back(v);
  for(int i=0;i<rG[v].size();i++){
    if(!used[rG[v][i]]) rdfs(rG[v][i],k);
  }
}
int scc(){
  memset(used,0,sizeof(used));
  vs.clear();
  for(int v=0;v<V;v++){
    if(!used[v]) dfs(v);
  }
  memset(used,0,sizeof(used));
  int k=0;
  for(int i=vs.size()-1;i>=0;i--){
    if(!used[vs[i]]) rdfs(vs[i],k++);
  }
  return k;
}
int main(){
  while(cin>>V,V){
    int i,j,k,l;
    for(i=0;i<MAX_V;i++) G[i].clear(),rG[i].clear(),vG[i].clear();
    double p[V];
    for(i=0;i<V;i++){
      cin>>p[i]>>k;
      for(j=0;j<k;j++){
	cin>>l;
	add_edge(i,l-1);
      }
    }
    k=scc();
    double ans=1.0,res;
    for(i=0;i<k;i++){
      bool f=1;
      res = 1.0;
      for(j=0;j<vG[i].size();j++){
	res*=p[vG[i][j]];
	for(l=0;l<rG[vG[i][j]].size();l++)
	  f&=(cmp[vG[i][j]]==cmp[rG[vG[i][j]][l]]);
      }
      if(f) ans*=(1.0-res);
    }
    printf("%.10lf\n",ans);
  }
  return 0;
}