/* template.cpp {{{ */
#include <bits/stdc++.h>
using namespace std;
#define get_macro(a, b, c, d, name, ...) name
#define rep(...) get_macro(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)
#define rrep(...) get_macro(__VA_ARGS__, rrep4, rrep3, rrep2, rrep1)(__VA_ARGS__)
#define rep1(n) rep2(i_, n)
#define rep2(i, n) rep3(i, 0, n)
#define rep3(i, a, b) rep4(i, a, b, 1)
#define rep4(i, a, b, s) for (ll i = (a); i < (ll)(b); i += (ll)(s))
#define rrep1(n) rrep2(i_, n)
#define rrep2(i, n) rrep3(i, 0, n)
#define rrep3(i, a, b) rrep4(i, a, b, 1)
#define rrep4(i, a, b, s) for (ll i = (ll)(b) - 1; i >= (ll)(a); i -= (ll)(s))
#define each(x, c) for (auto &&x : c)
#define fs first
#define sc second
#define all(c) begin(c), end(c)
using ui = unsigned;
using ll = long long;
using ul = unsigned long long;
using ld = long double;
const int inf = 1e9 + 10;
const ll inf_ll = 1e18 + 10;
const ll mod = 1e9 + 7;
const ll mod9 = 1e9 + 9;
const int dx[]{-1, 0, 1, 0, -1, 1, 1, -1};
const int dy[]{0, -1, 0, 1, -1, -1, 1, 1};
template<class T, class U> void chmin(T &x, const U &y){ x = min<T>(x, y); }
template<class T, class U> void chmax(T &x, const U &y){ x = max<T>(x, y); }
struct prepare_ { prepare_(){ cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(12); } } prepare__;
/* }}} */

int n;
double p[100];
vector<int> g[100];
vector<int> rg[100];
bool vis[100];
vector<int> ord;
int c[100];
double d[100];
vector<int> gg[100];
int in[100];

void dfs(int v){
  vis[v] = true;
  each(u, g[v]) if (!vis[u]) dfs(u);
  ord.push_back(v);
}

void dfs(int v, int ii){
  vis[v] = true;
  c[v] = ii;
  each(u, rg[v]) if (!vis[u]) dfs(u, ii);
}

int main(){
  while (cin >> n, n){
    rep(i, 100) g[i].clear();
    rep(i, 100) rg[i].clear();
    memset(vis, 0, sizeof(vis));
    ord.clear();
    rep(i, 100) gg[i].clear();
    memset(in, 0, sizeof(in));

    rep(i, n){
      int m;
      cin >> p[i] >> m;
      //p[i] = 1.0 - p[i];
      g[i].resize(m);
      each(x, g[i]){
        cin >> x, x--;
        rg[x].push_back(i);
      }
    }
    rep(i, n) if (!vis[i]) dfs(i);
    reverse(all(ord));
    memset(vis, 0, sizeof(vis));
    int ii = 0;
    each(i, ord) if (!vis[i]) dfs(i, ii++);
    rep(i, ii) d[i] = 1.0;
    rep(i, n){
      d[c[i]] *= p[i];
      each(j, g[i]) if (c[i] != c[j]) gg[c[i]].push_back(c[j]);
    }
    rep(i, ii){
      sort(all(gg[i]));
      gg[i].erase(unique(all(gg[i])), end(gg[i]));
    }
    /*
    double res = 1.0;
    rep(i, ii){
      cout << i << ": ";
      each(j, gg[i]) cout << j << " ", d[j] *= d[i];
      cout << endl;
      if (gg[i].empty()) res *= d[i];
    }
    cout << 1.0 - res << endl;
    */
    rep(i, ii) each(j, gg[i]) in[j]++;
    double res = 1.0;
    rep(i, ii) if (in[i] == 0) res *= 1.0 - d[i];
    cout << res << endl;
  }
}