#include <vector>
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
string Pi(int N)
{
int M = (N*10+2)/3;
vector<int> r(M,2);
string pi;
pi.reserve(N+1);
for(int i = 0; i < N; ++i)
{
int carry = 0;
int sum = 0;
for(int j = M-1; j >= 0; --j)
{
r[j] *= 10;
sum = r[j] + carry;
int q = sum / (2*j+1);
r[j] = sum % (2*j+1);
carry = q * j;
}
r[0] = sum % 10;
int q = sum / 10;
if (q >= 10)
{
q = q - 10;
for(int j = pi.length()-1;;--j)
{
if (pi[j] == '9')
pi[j] = '0';
else
{
++pi[j];
break;
}
}
}
pi += ('0' + q);
if (i== 0) pi += '.';
}
return pi;
}
int main(int argc, const char * argv[])
{
cout << Pi(2000) << endl;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJpbmcgUGkoaW50IE4pCnsKICAgIGludCBNID0gKE4qMTArMikvMzsKICAgIHZlY3RvcjxpbnQ+IHIoTSwyKTsKICAgIHN0cmluZyBwaTsKICAgIHBpLnJlc2VydmUoTisxKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBOOyArK2kpCiAgICB7CiAgICAgICAgaW50IGNhcnJ5ID0gMDsKICAgICAgICBpbnQgc3VtID0gMDsKICAgICAgICBmb3IoaW50IGogPSBNLTE7IGogPj0gMDsgLS1qKQogICAgICAgIHsKICAgICAgICAgICAgcltqXSAqPSAxMDsKICAgICAgICAgICAgc3VtID0gcltqXSArIGNhcnJ5OwogICAgICAgICAgICBpbnQgcSA9IHN1bSAvICgyKmorMSk7CiAgICAgICAgICAgIHJbal0gID0gc3VtICUgKDIqaisxKTsKICAgICAgICAgICAgY2FycnkgPSBxICogajsKICAgICAgICB9CiAgICAgICAgclswXSA9IHN1bSAlIDEwOwogICAgICAgIGludCBxID0gc3VtIC8gMTA7CiAgICAgICAgaWYgKHEgPj0gMTApCiAgICAgICAgewogICAgICAgICAgICBxID0gcSAtIDEwOwogICAgICAgICAgICBmb3IoaW50IGogPSBwaS5sZW5ndGgoKS0xOzstLWopCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChwaVtqXSA9PSAnOScpCiAgICAgICAgICAgICAgICAgICAgcGlbal0gPSAnMCc7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKytwaVtqXTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwaSArPSAoJzAnICsgcSk7CiAgICAgICAgaWYgKGk9PSAwKSBwaSArPSAnLic7CiAgICB9CiAgICByZXR1cm4gcGk7Cn0KCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBjb3V0IDw8IFBpKDIwMDApIDw8IGVuZGw7Cn0K