#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<set>
#include<string>
#include<map>
#include<string.h>
#include<complex>
#include<math.h>
#include<queue>
#include <functional>
#include<time.h>
#include <stack>
#include<iomanip>
using namespace std;
#define rep(i,a,n) for(int i=(a);i<(n);i++)
#define ll long long
#define llint long long int
#define reverse(v)  reverse(v.begin(), v.end());
#define Yes(ans) if(ans)cout<<"Yes"<<endl; else cout<<"No"<<endl;
#define YES(ans) if(ans)cout<<"YES"<<endl; else cout<<"NO"<<endl;
#define hei(a) vector<a>
#define whei(a) vector<vector<a>>
#define UF  UnionFind
#define rt (a); return (a); 
#define Pint pair<int,int>
#define keta(a)  fixed << setprecision(a)
constexpr auto INF = 1000000000;
constexpr auto mod = 1000000007;
//辞書順はnext_permutation( begin( v ), end( v ) );やで！
llint gcd(llint a, llint b) {
	if (b > a)swap(a, b);
	if (a % b == 0)return b;
	return gcd(b, a % b);
}
llint Tow(int n) {//2のn乗
	if (n == 0)return 1;
	llint x = Tow(n / 2);
	x %= mod;
	x *= x;
	x %= mod;
	if (n % 2 == 1)x *= 2;
	x %= mod;
	return x;
}
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };
char a[501][501];
bool seen[1000][1000] = { false };
void dfs(int x,int y,int h,int w) {
	seen[x][y] = true;
	for (int i = 0; i < 4; i++) {
		int Nx = x + dx[i];
		int Ny = y + dy[i];
		if (Nx >= h || Ny >= w || seen[Nx][Ny] || a[Nx][Ny] == '#' || Nx < 0 || Ny < 0)continue;
		dfs(Nx, Ny,h,w);
	}
}
int main() {
	double a;
	cin >> a;
	double ans = 3.14159265 * a * 2;
	cout << keta(15) << ans << endl;
	return 0;
}