#include <bits/stdc++.h>
using namespace std;
long long val[1 << 18];
const double pi = 3.1415926535897932384626433832795;
long long h[100005];
void change(int num, int l, int r, int k, long long t) {
  if (l == r - 1) {
    val[num] = max(val[num], t);
    return;
  }
  int mid = (l + r) / 2;
  if (k < mid) {
    change(num * 2 + 1, l, mid, k, t);
  } else {
    change(num * 2 + 2, mid, r, k, t);
  }
  val[num] = max(val[num * 2 + 1], val[num * 2 + 2]);
}
long long query(int num, int l, int r, int l0, int r0) {
  if ((l0 <= l) && (r <= r0)) {
    return val[num];
  }
  long long ans = 0;
  int mid = (l + r) / 2;
  if (l0 < mid) ans = max(ans, query(num * 2 + 1, l, mid, l0, r0));
  if (mid < r0) ans = max(ans, query(num * 2 + 2, mid, r, l0, r0));
  return ans;
}
map<long long, int> ma;
int main() {
  int n;
  scanf("%d", &n);
  int i;
  for (i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    h[i] = x * x;
    scanf("%d", &x);
    h[i] *= x;
    ma[h[i]] = 0;
  }
  map<long long, int>::iterator ii;
  int sum = 0;
  for (ii = ma.begin(); ii != ma.end(); ii++) {
    (*ii).second = sum++;
  }
  for (i = 0; i < n; i++) {
    long long ans = h[i];
    ans += query(0, 0, sum, 0, ma[h[i]]);
    change(0, 0, sum, ma[h[i]], ans);
  }
  printf("%.12lf\n", query(0, 0, sum, 0, sum) * pi);
  return 0;
}
