#include <iostream>
#include <cstdlib>
#include <map>
#include <vector>
#include <set>
#include <unordered_map>
#include <cstring>
using namespace std;
typedef vector<int> vi;
typedef pair<int,int> ii;
typedef vector<ii> vii;

vii adj(100010);
vi seen(100010);

vi path;

void find_cycle(int i) {
  seen[i] = 1;
  int to = adj[i].first;
  path.push_back(i);

  if (seen[to]) {
    path.push_back(to);
    return;
  } else {
    find_cycle(to);
  }
}

int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int to, p;
    cin >> to >> p;
    if (to == i) { // this never happens
      while (1) {}
    }
    adj[i].first = to;
    adj[i].second = p;
  }

  double ans = 0;
  for (int i = 1; i <= n; i++) {
    if (!seen[i]) {
      path.clear();
      find_cycle(i);
      double tmp = 1;
      /*
      for (int j = 0; j < path.size(); j++) {
       cout << path[j] << ", ";
      }
      cout << endl;
      */

      // Make sure path.back() is in that path twice
      int count = 1;
      for (int j = 0; j < path.size()-1; j++) {
        if (path[j] == path.back()) count++;
      }
      if (count == 1) continue;

      for (int j = path.size() - 1; j >= 1; j--) {
        int to = path[j];
        int from = path[j-1];
        double p = (double)adj[to].second / 100.0;
        if (j != path.size()-1 && to == path.back()) break;
       // cout << from << " --> " << to << ": " << p << endl;
        tmp *= p;
      }
      ans += tmp;
    }
  }
  
  printf("%.2lf\n", ans);
  return 0;
}