#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
const int maxm = 100010;
const int mod = 1e9 + 7;
const int inf = 1e9 + 7;
const int dev = 2000;
const double eps = 1e-6;
const double pi = acos(-1.0);
int n, m;
struct Cake {
  long long r, h;
  long long vol;
  int id;
  bool operator<(const Cake &temp) const {
    if (vol != temp.vol)
      return vol < temp.vol;
    else
      return id > temp.id;
  }
} cake[maxn];
long long a[maxn];
int lowbit(int x) { return x & (-x); }
void gao(int x, long long c) {
  while (x <= n) {
    a[x] = max(a[x], c);
    x += lowbit(x);
  }
}
long long getmx(int x) {
  long long ret = 0;
  while (x > 0) {
    ret = max(ret, a[x]);
    x -= lowbit(x);
  }
  return ret;
}
int main() {
  while (scanf("%d", &n) != EOF) {
    memset(a, 0, sizeof(a));
    for (int i = 1; i <= n; i++) {
      scanf("%I64d%I64d", &cake[i].r, &cake[i].h);
      cake[i].vol = cake[i].r * cake[i].r * cake[i].h;
      cake[i].id = i;
    }
    sort(cake + 1, cake + n + 1);
    long long ans = 0;
    for (int i = 1; i <= n; i++) {
      int id = cake[i].id;
      long long temp = getmx(id - 1);
      temp += cake[i].vol;
      ans = max(ans, temp);
      gao(id, temp);
    }
    double vans = ans * pi;
    printf("%.10f\n", vans);
  }
  return 0;
}
