#include <bits/stdc++.h>
using namespace std;
using graph = vector<vector<long long>>;
const long long MAX = 510000;
const long long MOD = 1000000007;
long long fac[MAX], finv[MAX], inv[MAX];
void cominit() {
  fac[0] = fac[1] = 1;
  finv[0] = finv[1] = 1;
  inv[1] = 1;
  for (long long i = 2; i < MAX; i++) {
    fac[i] = fac[i - 1] * i % MOD;
    inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;
    finv[i] = finv[i - 1] * inv[i] % MOD;
  }
}
long long modinv(long long a, long long m) {
  long long b = m, u = 1, v = 0;
  while (b) {
    long long t = a / b;
    a -= t * b;
    swap(a, b);
    u -= t * v;
    swap(u, v);
  }
  u %= m;
  if (u < 0) u += m;
  return u;
}
long long com(long long n, long long k) {
  if (n < k) return 0;
  if (n < 0 || k < 0) return 0;
  return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}
long long com2(long long n, long long k) {
  long long res, bs = 1, bb = 1;
  for (long long i = 0; i < k; i++) {
    bs = (bs * (n - i)) % 1000000007;
    bb = (bb * (i + 1)) % 1000000007;
  }
  res = modinv(bb, 1000000007) % 1000000007;
  res = (res * bs) % 1000000007;
  return res;
}
long long per(long long n, long long k) {
  if (n < k) return 0;
  if (n < 0 || k < 0) return 0;
  return fac[n] * (finv[n - k] % MOD) % MOD;
}
double dist(pair<double, double> a, pair<double, double> b) {
  return sqrt(pow((a.first - b.first), 2) + pow((a.second - b.second), 2));
}
double ism(double aa, long long p) {
  double ap = aa;
  double ans = 1;
  while (p > 0) {
    if (p & 1) {
      ans *= ap;
    }
    p /= 2;
    ap = ap * ap;
  }
  return ans;
}
long long ismm(long long aa, long long p) {
  long long ap = aa;
  long long ans = 1;
  while (p > 0) {
    if (p & 1) {
      ans = (ans * ap) % 1000000007;
    }
    p /= 2;
    ap = (ap * ap) % 1000000007;
  }
  return ans;
}
struct UnionFind {
  vector<long long> par;
  UnionFind(long long n) : par(n, -1) {}
  long long root(long long x) {
    if (par[x] < 0)
      return x;
    else
      return par[x] = root(par[x]);
  }
  bool issame(long long x, long long y) { return root(x) == root(y); }
  bool merge(long long x, long long y) {
    x = root(x);
    y = root(y);
    if (x == y) return false;
    if (par[x] > par[y]) swap(x, y);
    par[x] += par[y];
    par[y] = x;
    return true;
  }
  long long size(long long x) { return -par[root(x)]; }
};
struct all_init {
  all_init() { cout << fixed << setprecision(12); }
} All_init;
int main() {
  long long r;
  cin >> r;
  cout << (double)2 * r * 3.14159265359 << '\n';
}
