#include <bits/stdc++.h>
using namespace std;

const double p_suc = 1.0/4;
const double p_fail = 3.0/2000;
const double p_any = p_suc + p_fail;

vector<double> chain(vector< vector<double> > A, vector<double> b) {
    while(accumulate(b.begin()+1, prev(b.end()), 0.0) > 1e-9){
        vector<double> c(b.size(), 0.0);
        for(int j=0;j<A.size();++j){
            for(int i=0;i<b.size();++i){
                c[j] += A[j][i] * b[i];
            }
        }
        b = c;
    }
    return b;
}

double get_failprob(int n){
    vector<vector<double> > A(2*n+1, vector<double>(2*n+1, 0.0));
    A[0][0] = A[2*n].back() = 1.0;
    for(int i=1;i<2*n;++i){
        A[i-1][i] = p_fail / p_any;
        A[i+1][i] = p_suc / p_any;
    }
    vector<double> b(2*n+1, 0);
    b[n] = 1;
    auto ans = chain(A, b);

    for(auto &e:ans) cerr << e << " "; cerr << "\n";

    return ans[0];
}

signed main()
{
    int n = 5;
    vector<double> v(n);
    for(int i=1;i<n;++i){
        v[i] = get_failprob(i);
    }
    for(int i=1;i<n;++i){
        cout << i << " : " << setw(12) <<  v[i] << " " << 1000*(v[i]) << "\n";
    }
    return 0;
}
