#include <bits/stdc++.h>
using namespace std;
const double PI = 3.14159265358979323846;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
void dump(const vector<T> &v) {
  for (int i = 0; i < (int)(((int)(v).size()) - 1); i++) {
    cout << v[i] << " ";
  }
  cout << v[((int)(v).size()) - 1] << endl;
}
template <class T>
void dump(int w, int h, const vector<T> &v) {
  for (int j = 0; j < (int)(h); j++) {
    for (int i = 0; i < (int)(w - 1); i++) {
      cout << v[j * w + i] << " ";
    }
    cout << v[j * w + w - 1] << endl;
  }
}
template <class T>
T accumulate(const vector<T> &v) {
  T sum = 0;
  for (int i = 0; i < (int)(((int)(v).size())); i++) {
    sum += v[i];
  }
  return sum;
}
template <class T>
struct Matrix {
  T w, h;
  vector<T> A;
  Matrix(T w_, T h_) : w(w_), h(h_), A(w * h) {}
  T get(T x, T y) const { return A[y * w + x]; }
};
template <class T>
void input(Matrix<T> &m) {
  for (int j = 0; j < (int)(m.h); j++) {
    for (int i = 0; i < (int)(m.w); i++) {
      cin >> m.A[j * m.w + i];
    }
  }
}
template <class T>
Matrix<T> prod(const Matrix<T> &a, const Matrix<T> &b) {
  Matrix<T> m(b.w, a.h);
  for (int j = 0; j < (int)(m.h); j++) {
    for (int i = 0; i < (int)(m.w); i++) {
      long long c = 0;
      for (int k = 0; k < (int)(a.w); k++) {
        c += a.A[j * a.w + k] * b.A[k * b.w + i];
      }
      m.A[j * m.w + i] = c;
    }
  }
  return m;
}
void dump(const Matrix<long long> &m) {
  for (int j = 0; j < (int)(m.h); j++) {
    for (int i = 0; i < (int)(m.w - 1); i++) {
      printf("%lld ", m.A[j * m.w + i]);
    }
    printf("%lld\n", m.A[j * m.w + m.w - 1]);
  }
}
void dump(const Matrix<double> &m) {
  for (int j = 0; j < (int)(m.h); j++) {
    for (int i = 0; i < (int)(m.w - 1); i++) {
      printf("%f ", m.A[j * m.w + i]);
    }
    printf("%f\n", m.A[j * m.w + m.w - 1]);
  }
}
string &to_upper(string &s) {
  for (int i = 0; i < (int)(s.length()); i++) {
    if ('a' <= s[i] && s[i] <= 'z') {
      s[i] -= 32;
    }
  }
  return s;
}
string &to_lower(string &s) {
  for (int i = 0; i < (int)(s.length()); i++) {
    if ('A' <= s[i] && s[i] <= 'Z') {
      s[i] += 32;
    }
  }
  return s;
}
template <class T>
vector<T> get_divisors(T n) {
  vector<T> ret;
  for (T i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      ret.push_back(i);
      if (i * i != n) ret.push_back(n / i);
    }
  }
  sort((ret).begin(), (ret).end());
  return ret;
}
template <class T>
vector<T> get_divisors2(T n) {
  vector<T> ret;
  for (T i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      ret.push_back(i);
    }
  }
  return ret;
}
int F(long long A, long long B) {
  return ((int)(to_string(max(A, B))).length());
}
int main() {
  double R;
  cin >> R;
  printf("%.3f\n", 2 * PI * R);
  return 0;
}
