#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
const double eps = 1e-9;
long long power(long long x, long long n) {
  long long m = 1;
  for (long long i = 1; i <= n; i++) m *= x;
  return m;
}
long long ans[100050];
long long mxq[100005 << 2];
void upd(long long i, long long l, long long r, long long p, long long x) {
  long long m, lc, rc;
  if (l == r) {
    mxq[i] = x;
    return;
  }
  m = (l + r) >> 1;
  lc = i << 1;
  rc = lc | 1;
  if (p <= m)
    upd(lc, l, m, p, x);
  else
    upd(rc, m + 1, r, p, x);
  mxq[i] = max(mxq[lc], mxq[rc]);
}
long long qry(long long i, long long l, long long r, long long ql,
              long long qr) {
  long long m, x, y, lc, rc;
  if (qr < l || ql > r) return 0;
  if (l >= ql && r <= qr) return mxq[i];
  m = (l + r) >> 1;
  lc = i << 1;
  rc = lc | 1;
  x = qry(lc, l, m, ql, qr);
  y = qry(rc, m + 1, r, ql, qr);
  return max(x, y);
}
int main() {
  long long i, j, k, l, p, q, r, x, y, z, n, m, c(0), t, h, mn = pow(2, 62) - 1,
                                                            mx = 0;
  scanf("%I64d", &n);
  pair<long long, long long> a[n + 1];
  long long b[n + 1];
  for (i = 1; i <= n; i++) {
    scanf("%I64d %I64d", &x, &y);
    p = x * x * y;
    a[i].first = b[i] = p;
  }
  sort(b + 1, b + n + 1);
  for (i = 1; i <= n; i++)
    a[i].second = lower_bound(b + 1, b + n + 1, a[i].first) - b;
  for (i = 1; i <= n; i++) {
    ans[i] = qry(1, 1, n, 1, a[i].second - 1) + a[i].first;
    mx = max(mx, ans[i]);
    upd(1, 1, n, a[i].second, ans[i]);
  }
  double xx = PI * mx;
  printf("%0.9f", xx);
}
