Problem: Aoki is in search of Takahashi, who is missing in a one-dimentional world. Initially, the coordinate of Aoki is 0, and the coordinate of Takahashi is known to be x, but his coordinate afterwards cannot be known to Aoki.

Time is divided into turns. In each turn, Aoki and Takahashi take the following actions simultaneously:

* Let the current coordinate of Aoki be a, then Aoki moves to a coordinate he selects from a-1, a and a+1.

* Let the current coordinate of Takahashi be b, then Takahashi moves to the coordinate b-1 with probability of p percent, and moves to the coordinate b+1 with probability of 100-p percent.




When the coordinates of Aoki and Takahashi coincide, Aoki can find Takahashi. When they pass by each other, Aoki cannot find Takahashi.

Aoki wants to minimize the expected number of turns taken until he finds Takahashi. Find the minimum possible expected number of turns.

Constraints

* 1 ≦ x ≦ 1,000,000,000
* 1 ≦ p ≦ 100
* x and p are integers.

Input

The input is given from Standard Input in the following format:


x
p


Output

Print the minimum possible expected number of turns. The output is considered correct if the absolute or relative error is at most 10^{-6}.

Examples

Input

3
100


Output

2.0000000


Input

6
40


Output

7.5000000


Input

101
80


Output

63.7500000

Solution (in CPP):

Solution:
                                    #include <bits/stdc++.h>
                                    #include<iostream>
                                    #include<cstdio>
                                    #include<vector>
                                    #include<queue>
                                    #include<map>
                                    #include<cstring>
                                    #include<string>
                                    #include <math.h>
                                    #include<algorithm>
                                //    #include <boost/multiprecision/cpp_int.hpp>
                                    #include<functional>
                          #define int long long
                                    #define inf  1000000007
                                    #define pa pair<int,int>
                                    #define ll long long
                                    #define pal pair<double,pa>
                                    #define ppa pair<pa,int>
                                    #define ppap pair<int,pa>
                                    #define ssa pair<string,int>
                                    #define  mp make_pair
                                    #define  pb push_back
                                    #define EPS (1e-10)
                                    #define equals(a,b) (fabs((a)-(b))<EPS)
                             
                                    using namespace std;
                          
                                    class Point{
                                    	public:
                                    	double x,y;
                                    	Point(double x=0,double y=0):x(x),y(y) {}
                                    	Point operator + (Point p) {return Point(x+p.x,y+p.y);}
                                    	Point operator - (Point p) {return Point(x-p.x,y-p.y);}
                                    	Point operator * (double a) {return Point(x*a,y*a);}
                                    	Point operator / (double a) {return Point(x/a,y/a);}
                                    	double absv() {return sqrt(norm());}
                                    	double norm() {return x*x+y*y;}
                                    	bool operator < (const Point &p) const{
                                    		return x != p.x ? x<p.x: y<p.y;
                                    	}
                                    	bool operator == (const Point &p) const{
                                    		return fabs(x-p.x)<EPS && fabs(y-p.y)<EPS;
                                    	}
                                    };
                                    typedef Point Vector;
                             
                                    struct Segment{
                                    Point p1,p2;
                                    };
                                     double dot(Vector a,Vector b){
                                    	return a.x*b.x+a.y*b.y;
                                    }
                                    double cross(Vector a,Vector b){
                                    	return a.x*b.y-a.y*b.x;
                                    }
                                    class pa3{
                                        	public:
                                        	int x,y,z;
                                        	pa3(int x=0,int y=0,int z=0):x(x),y(y),z(z) {}
                                        	bool operator < (const pa3 &p) const{
                                        		if(x!=p.x) return x<p.x;
                                        		if(y!=p.y) return y<p.y;
                                        		 return z<p.z;
                                        		//return x != p.x ? x<p.x: y<p.y;
                                        	}
                               				bool operator > (const pa3 &p) const{
                                        		if(x!=p.x) return x>p.x;
                                        		if(y!=p.y) return y>p.y;
                                        		 return z>p.z;
                                        		//return x != p.x ? x<p.x: y<p.y;
                                        	}
                                        	bool operator == (const pa3 &p) const{
                                        		return x==p.x && y==p.y && z==p.z;
                                        	}
                                        		bool operator != (const pa3 &p) const{
                                        			return !( x==p.x && y==p.y && z==p.z);
                                        	}
                                        
                                        };
                                        
                                
        bool parareru(Point a,Point b,Point c,Point d){
        //	if(abs(cross(a-b,d-c))<EPS)cout<<"dd "<<cross(a-b,d-c)<<endl;
        	return abs(cross(a-b,d-c))<EPS;
        }
        double distance_ls_p(Point a, Point b, Point c) {
          if ( dot(b-a, c-a) < EPS ) return (c-a).absv();
          if ( dot(a-b, c-b) < EPS ) return (c-b).absv();
          return abs(cross(b-a, c-a)) / (b-a).absv();
        }
        bool is_intersected_ls(Segment a,Segment b) {
        	if(a.p1==b.p1||a.p2==b.p1||a.p1==b.p2||a.p2==b.p2) return false;
        	if(parareru((a.p2),(a.p1),(a.p1),(b.p2))&&parareru((a.p2),(a.p1),(a.p1),(b.p1))){
        //		cout<<"sss"<<endl;
        		if(dot(a.p1-b.p1,a.p1-b.p2)<EPS) return true;
        		if(dot(a.p2-b.p1,a.p2-b.p2)<EPS) return true;
        		if(dot(a.p1-b.p1,a.p2-b.p1)<EPS) return true;
        		if(dot(a.p1-b.p2,a.p2-b.p2)<EPS) return true;
        		return false;
        	}
          else return ( cross(a.p2-a.p1, b.p1-a.p1) * cross(a.p2-a.p1, b.p2-a.p1) < EPS ) && ( cross(b.p2-b.p1, a.p1-b.p1) * cross(b.p2-b.p1, a.p2-b.p1) < EPS );
        }
         
        double segment_dis(Segment a,Segment b){
        	if(is_intersected_ls(a,b))return 0;
        	double r=distance_ls_p(a.p1, a.p2, b.p1);
        	r=min(r,distance_ls_p(a.p1, a.p2, b.p2));
        	r=min(r,distance_ls_p(b.p1, b.p2, a.p2));
        	r=min(r,distance_ls_p(b.p1, b.p2, a.p1));
        	return r;
        }
        Point intersection_ls(Segment a, Segment b) {
          Point ba = b.p2-b.p1;
          double d1 = abs(cross(ba, a.p1-b.p1));
          double d2 = abs(cross(ba, a.p2-b.p1));
          double t = d1 / (d1 + d2);
         
          return a.p1 + (a.p2-a.p1) * t;
        }
         
                        string itos( int i ) {
                        ostringstream s ;
                        s << i ;
                        return s.str() ;
                        }
                         
                        int gcd(int v,int b){
                        	if(v>b) return gcd(b,v);
                        	if(v==b) return b;
                        	if(b%v==0) return v;
                        	return gcd(v,b%v);
                        }
         
                        double distans(double x1,double y1,double x2,double y2){
                        	double rr=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
                        	return sqrt(rr);
                        	
                        }
                        /*
        int pr[100010];
        //int inv[100010];
        */ 
        int beki(int wa,int rr,int warukazu){
        	if(rr==0) return 1ll;
        	if(rr==1) return wa%warukazu;
        	if(rr%2==1) return (beki(wa,rr-1,warukazu)*wa)%warukazu;
        	int zx=beki(wa,rr/2,warukazu);
        	return (zx*zx)%warukazu;
        }
 //       cin.tie(0);
//ios::sync_with_stdio(false);
          /*
        void gya(){
        	pr[0]=1;
        	for(int i=1;i<100010;i++){
        		pr[i]=(pr[i-1]*i)%inf;
        	}
        	for(int i=0;i<100010;i++) inv[i]=beki(pr[i],inf-2);
        	
        }
         
        */
         //sort(ve.begin(),ve.end(),greater<int>());
                                 //----------------kokomade tenpure------------
        //vector<double> ans(100000000),ans2(100000000);
        
        int par[200100],ranks[200100],kosuu[200100];     
         
        void shoki(int n){
        	for(int i=0;i<n;i++){
        		par[i]=i;
        		ranks[i]=0;
        		kosuu[i]=1;
        	}
        }
         
        int root(int x){
        	return par[x]==x ? x : par[x]=root(par[x]);
        }
         
        bool same(int x,int y){
        return root(x)==root(y);
        }
         
        void unite(int x,int y){
         x=root(x);
         y=root(y);
        	int xx=kosuu[x],yy=kosuu[y];
         if(x==y) return;
        	if(ranks[x]<ranks[y]){
        		par[x]=y;
        		kosuu[y]=yy+xx;
        	}
         else {
        	par[y]=x;
        	if(ranks[x]==ranks[y]) ranks[x]=ranks[x]+1;
         	kosuu[x]=yy+xx;
         }
        	return;
        }

vector<int> ve;
int ans[100020];
int w[100020];
int x[100020];
   int n,l,t;
int f(int r){
	
	if(r>=0){
		return r%n;
	
	}
	int rr=-r;
	int g=rr/n+1;
	rr-=g*n;
	return f(-rr);
}
        signed main(){
       	        cin.tie(0);
ios::sync_with_stdio(false);

int x;
        	double p;
        	cin>>x>>p;
        	p/=100.0;
        	
        	x=(x+1)/2;
        	printf("%.10lf\n",x/p);
        }