#include <bits/stdc++.h>
using namespace std;
#define V 100001
vector<int> G[V],rG[V],v;
bool u[V];
int n,cmp[V];

void add_edge(int x, int y) {
  G[x].push_back(y);
  rG[y].push_back(x);
}
void dfs(int x) {
  u[x]=1;
  for(int i=0; i<G[x].size(); i++) {
    if(!u[G[x][i]]) dfs(G[x][i]);
  }
  v.push_back(x);
}
void rdfs(int x, int k) {
  u[x]=1;
  cmp[x]=k;
  for(int i=0; i<rG[x].size(); i++) {
    if(!u[rG[x][i]]) rdfs(rG[x][i],k);
  }
}
int scc() {
  memset(u,0,sizeof(u));
  v.clear();
  for(int i=0; i<n; i++) {
    if(!u[i]) dfs(i);
  }
  memset(u,0,sizeof(u));
  int k = 0;
  for(int i=v.size()-1; i>=0; i--) {
    if(!u[v[i]]) rdfs(v[i],k++);
  }
  return k;
}
int main() {
  while(cin >> n && n) {
    for(int i=0; i<n; i++) G[i].clear(),rG[i].clear();
    double p[n];
    for(int i=0,m; i<n; i++) {
      cin >> p[i] >> m;
      for(int j=0; j<m; j++) {
        int x;
        cin >> x;
        x--;
        add_edge(i,x);
      }
    }
    int cnt=scc();
    int c[n],d[n];memset(c,0,sizeof(c));memset(d,0,sizeof(d));
    for(int i=0; i<n; i++) {
      for(int j=0; j<G[i].size(); j++) {
        if(cmp[G[i][j]]!=cmp[i]) c[cmp[G[i][j]]]=1;
      }
      d[cmp[i]]=1;
    }
    double ans=1;
    for(int i=0; i<n; i++) {
      if(!c[i]&&d[i]) {
        double x=1;
        for(int j=0; j<n; j++) {
          if(cmp[j]==i) x*=p[j];
        }
        ans*=1.0-x;
      }
    }
    printf("%.10f\n",ans);
  }
  return 0;
}
