#include <bits/stdc++.h>
using namespace std;
long long v[100500];
map<long long, long long> mm;
vector<long long> v2;
long long t1[400500];
void add_dp(int v, int tl, int tr, int ind, long long val) {
  if (tl == tr) {
    t1[v] = val;
    return;
  }
  int tm = (tl + tr) >> 1;
  int nv = v << 1;
  if (ind <= tm)
    add_dp(nv, tl, tm, ind, val);
  else
    add_dp(nv + 1, tm + 1, tr, ind, val);
  t1[v] = max(t1[nv], t1[nv + 1]);
}
long long _get(int v, int tl, int tr, int l, int r) {
  if (l > r) return 0;
  if (tl == l && tr == r) return t1[v];
  int tm = (tl + tr) >> 1;
  int nv = v << 1;
  return max(_get(nv, tl, tm, l, min(tm, r)),
             _get(nv + 1, tm + 1, tr, max(l, tm + 1), r));
}
const long double pi = 3.1415926535897932384626433832795;
long long dp[100500];
int main() {
  long long n, i, r, h, x, l, mid, rr = 0;
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long double res = 0;
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> r >> h;
    v[i] = r * r * h;
  }
  for (i = 1; i <= n; i++) {
    v2.push_back(v[i]);
  }
  sort(v2.begin(), v2.end());
  for (i = 0; i < n; i++) {
    if (i && v2[i] == v2[i - 1])
      mm[v2[i]] = mm[v2[i - 1]];
    else
      mm[v2[i]] = i + 1;
  }
  for (i = 1; i <= n; i++) {
    if (i == 1) {
      dp[i] = v[i];
      add_dp(1, 1, n, mm[v[i]], v[i]);
    } else {
      dp[i] = _get(1, 1, n, 1, mm[v[i]] - 1) + v[i];
      add_dp(1, 1, n, mm[v[i]], dp[i]);
    }
  }
  for (i = 1; i <= n; i++) {
    rr = max(rr, dp[i]);
  }
  res = rr;
  res *= pi;
  cout << setprecision(20) << res;
}
