#include <bits/stdc++.h>
using namespace std;
long long int arr[200005];
long long int max1[200005];
struct node {
  int val;
  node *right;
  node *left;
  node *parent;
};
struct item {
  int weight;
  int val;
};
bool compare(item a, item b) {
  if (a.weight != b.weight)
    return a.weight < b.weight;
  else
    return a.val > b.val;
}
node *readtree() {
  int x, lcnt, rcnt;
  cin >> x >> lcnt >> rcnt;
  node *root = new node;
  root->val = x;
  root->right = NULL;
  root->left = NULL;
  if (lcnt != 0) root->left = readtree();
  if (rcnt != 0) root->right = readtree();
  return root;
}
void prn_preorder(node *x) {
  if (x == NULL) return;
  cout << x->val;
  cout << "  ";
  prn_preorder(x->left);
  prn_preorder(x->right);
}
void prn_inorder(node *x) {
  if (x == NULL) return;
  prn_inorder(x->left);
  cout << x->val;
  cout << "  ";
  prn_inorder(x->right);
  if (x->left != NULL) x->left->parent = x;
  if (x->right != NULL) x->right->parent = x;
}
void swapchild(node *x) {
  node *temp;
  temp = x->right;
  x->right = x->left;
  x->left = temp;
}
node *rrotate(node *x) {
  node *temp = x->parent;
  node *q = x->left;
  node *v = x->left->right;
  q->right = x;
  x->left = v;
  if (v != NULL) v->parent = x;
  q->parent = temp;
  x->parent = q;
  return q;
}
node *lrotate(node *x) {
  node *temp = x->parent;
  node *p = x->right;
  ;
  node *v = x->right->left;
  p->left = x;
  x->right = v;
  if (v != NULL) v->parent = x;
  p->parent = temp;
  x->parent = p;
  return p;
}
int binarySearch(long long int arr[], int l, int r, long long int x) {
  if (r >= l) {
    int mid = l + (r - l) / 2;
    if (arr[mid] == x) return mid;
    if (arr[mid] > x) return binarySearch(arr, l, mid - 1, x);
    return binarySearch(arr, mid + 1, r, x);
  }
  return -1;
}
int max_xor(int arr[], int n) {
  int maxx = 0, mask = 0;
  set<int> se;
  for (int i = 30; i >= 0; i--) {
    mask |= (1 << i);
    for (int i = 0; i < n; ++i) {
      se.insert(arr[i] & mask);
    }
    int newMaxx = maxx | (1 << i);
    for (int prefix : se) {
      if (se.count(newMaxx ^ prefix)) {
        maxx = newMaxx;
        break;
      }
    }
    se.clear();
  }
  return maxx;
}
int minXOR(int arr[], int n) {
  sort(arr, arr + n);
  int minXor = INT_MAX;
  int val = 0;
  for (int i = 0; i < n - 1; i++) {
    val = arr[i] ^ arr[i + 1];
    minXor = min(minXor, val);
  }
  return minXor;
}
vector<long long int> v[200005];
long long int level;
long long int dfs(long long int x, long long int p) {
  if ((v[x].size() == 1) && (x != 1)) {
    max1[x] = 0;
    return max1[x];
  } else {
    long long int ans = 0;
    for (int i = 0; i < v[x].size(); i++) {
      if (v[x][i] != p) {
        ans += 1 + dfs(v[x][i], x);
      }
    }
    max1[x] = ans;
    return max1[x];
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  double r;
  cin >> r;
  cout << std::setprecision(10) << (M_PI * 2 * r) << endl;
}
