import java.io.*; 
public class BS {
     public static void main(String args[]) {
      int N;
      double r;
      double s;
      float K;
      double T;
      if (args.length==5) {
        N=Integer.parseInt(args[0]);
        Double r1=Double.valueOf(args[1]);
        r=r1.doubleValue();
        Double s1=Double.valueOf(args[2]);
        s=s1.doubleValue();
        Float K1=Float.valueOf(args[3]);
        K=K1.floatValue();
        Double T1=Double.valueOf(args[4]);
        T=T1.doubleValue();
        float L=2*K;
        double dX=L/(N-1);
        double[] u=fonctionu1(r,s,K,N,T);
        for(int i=0;i<=N-1;i++) 
            System.out.println(fonctionx(i,dX)+"   "+u[i]+"   "+fonctionu(i,K,dX));
        }
     }
     
    public static double[] fonctionu1(double r,double s,float K,int N,double T) {
         double[] U1=new double[N];
         double[] U=new double[N];
         float L=2*K;
         double dX=L/(N-1);
         for(int p=0;p<N;p++)
            U1[p]=fonctionu(p,K,dX);
         double dT=-dX*dX/(s*s*L*L+r*L*dX);
         double temps=T;

        while(temps>0) {
         dT=-Math.min(Math.abs(dT),temps);
         temps=temps+dT;
         for(int j=1;j<N-1;j++)
             U[j]=U1[j]+dT*(-r*fonctionx(j,dX)*(U1[j+1]-U1[j-1])/(2*dX)-(s*s*fonctionx(j,dX)*fonctionx(j,dX))*(U1[j+1]-2*(U1[j])+U1[j-1])/(2*dX*dX)+r*U1[j]);
    
          U[0]=0;
       // U[N-1]=U[N-2]+dX;
          U[N-1]= -K*Math.exp(r*(temps-T))+L;
      
         for(int k=0;k<N;k++)
           U1[k]=U[k];
        }
        return U1;
    }
    
     public static double fonctionu(int indice,float K,double dX) {
        double U=Math.max(0,fonctionx(indice,dX)-K);
        return U;
     }
     
      public static double fonctionx(int indice,double dX) {
        double x=(indice)*dX;
        return x;
     }
}
     