#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
long long r[N], h[N], a[N];
map<long long, int> m, m1;
long long bit[4 * N], bit1[4 * N];
long long get(int cur) {
  long long ans = 0;
  while (cur > 0) {
    ans = max(ans, bit1[cur]);
    cur -= (cur & -cur);
  }
  return ans;
}
void upd(int cur, long long val) {
  while (cur < 4 * N) {
    bit1[cur] = max(bit1[cur], val);
    cur += (cur & -cur);
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    scanf("%lld%lld", &r[i], &h[i]);
    a[i] = r[i] * r[i] * h[i];
    m[a[i]] = 1;
    m[a[i] - 1] = 1;
    m[a[i] + 1] = 1;
  }
  int ct = 1;
  for (auto it : m) {
    m1[it.first] = ct++;
  }
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    long long val = get(m1[a[i] - 1]);
    ans = max(ans, val + a[i]);
    upd(m1[a[i]], val + a[i]);
  }
  double ko = 3.141592653589;
  ans = 1.0 * ans;
  ko *= ans;
  printf("%.9lf", ko);
  return 0;
}
