import java.io.*;
import java.util.*;
import java.math.*;
import java.text.*;

class Polynomial
{
    private ArrayList<Double> coefficients = new ArrayList<Double>();
    private ArrayList<Double> testValues = new ArrayList<Double>();
    private ArrayList<ArrayList<ArrayList<Double>>> table = new ArrayList<ArrayList<ArrayList<Double>>>();
    
    
    private static String readString()
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in), 1);
        String str = "";
        
        try
        {
            str = br.readLine();
        }
        catch( IOException ex )
        {
            System.out.println( ex );
        }
        
        return str;
    }
    
    private static Double readDouble()
    {
        return Double.parseDouble( readString() );
    }
    
    private static Integer readInt()
    {
        return Integer.parseInt( readString() );
    }
    
    public String toString()
    {
        DecimalFormat fmt = new DecimalFormat( "0.#####" );
        
        String ret = "F(x) = ";
        for( int c = 0; c < coefficients.size(); ++c )
        {
            ret += fmt.format( coefficients.get(c) ) + "x^" + (coefficients.size() - c - 1);
            if( c < coefficients.size() - 1 )
                ret += " + ";
        }
        
        if( coefficients.size() == 0 )
        {
            ret = "F(x) is undefined.";
        }
        
        return ret;
    }
    
    public Double evaluate( Double x )
    {
        Double value = new Double( 0 );
        
        for( int i = 0; i < coefficients.size(); ++i )
        {
            value += coefficients.get(i) * Math.pow( x, coefficients.size() - i - 1 );
        }
        
        return value;
    }
    
    public void printPolynomial()
    {
        System.out.println( toString() );
    }
    
    public void printTable()
    {
        for( int a = 0; a < table.size(); ++a )
        {
            System.out.println( a + "th differences:" );
            for( int b = 0; b < table.get(a).size(); ++b )
            {
                for( int c = 0; c < table.get(a).get(b).size(); ++c )
                {
                    System.out.print( table.get(a).get(b).get(c) + "" + (char)( 'A' + c ));
                    if( c < table.get(a).get(b).size() - 1 )
                        System.out.print( " + " );
                }
                System.out.println();
            }
            System.out.println();
        }
    }
    
    private void buildTable()
    {
        if( testValues.size() == 0 )
            return;
        
        table.clear();
        // add the zero'th difference
        
        ArrayList<ArrayList<Double>> differences = new ArrayList<ArrayList<Double>>();
        for( int i = 1; i <= testValues.size(); ++i )
        {
            ArrayList<Double> set = new ArrayList<Double>();
            for( int j = testValues.size() - 1; j >= 0; --j )
            {
                set.add( Math.pow( i, j ));
            }
            differences.add( set );
        }
        table.add( differences );
        
        // set of differences
        for( int i = 0; i < testValues.size() - 1; ++i )
        {
            ArrayList<ArrayList<Double>> level = new ArrayList<ArrayList<Double>>();
            // set of equations
            for( int j = 0; j < table.get(i).size() - 1; ++j )
            {
                ArrayList<Double> set = new ArrayList<Double>();
                //set of coefficients
                for( int k = 0; k < table.get(i).get(j).size(); ++k )
                {
                    set.add( table.get(i).get(j+1).get(k) - (table.get(i).get(j).get(k)) );
                }
                level.add( set );
            }
            table.add( level );
        }
    }
    
    private void compute( boolean display )
    {
        if( testValues.size() == 0 )
            return;
        
        buildTable();
        
        ArrayList<ArrayList<Double>> differences = new ArrayList<ArrayList<Double>>();
        differences.add( testValues );
        for( int i = 0; i < testValues.size() - 1; ++i )
        {
            ArrayList<Double> level = new ArrayList<Double>();
            for( int j = 0; j < differences.get(i).size() - 1; ++j )
            {
                level.add( differences.get(i).get(j+1) - (differences.get(i).get(j)) );
            }
            differences.add( level );
        }
        
        if( display == true )
        {
            System.out.println( "Test value differences:" );
            for( int a = 0; a < differences.size(); ++a )
            {
                System.out.print( "Level " + a + ": ");
                
                for( int b = 0; b < differences.get(a).size(); ++b )
                {
                    System.out.print( differences.get(a).get(b) + "\t" );
                }
                System.out.println();
            }
        }

        for( int a = table.size() - 1; a >= 0; --a )
        {
            int i = table.size() - 1 - a;
            ArrayList<Double> equation = table.get(a).get(0);
            
            Double value = new Double( 0 );
            
            for( int b = 0; b < i; ++b )
            {
                value += coefficients.get(b) * ( equation.get(b) );
            }
            
            value = ( differences.get(a).get(0) - value ) / equation.get(i);
            coefficients.add( value );
        }
        
    }
    
    public void readPolynomial( boolean display )
    {
        System.out.print( "How many? " );
        int k = readInt();
        testValues.clear();
        coefficients.clear();
        
        for( int i = 0; i < k; ++i )
        {
            System.out.print( ( i + 1 ) + ": " );
            testValues.add( readDouble() );
        }
        
        compute( display );
    }
}

public class Poly
{
    public static void main(String args[])
    {
        Polynomial test = new Polynomial();
        test.readPolynomial( false );
        
        DecimalFormat fmt = new DecimalFormat( "0.#####" );
        
        System.out.println( test );
        for( int i = 0; i <=7; i ++ )
        {
            System.out.println( "F(" + i + ") = " + fmt.format( test.evaluate( new Double( i ) ) ));
        }
    }
}
