// ************************************************************************** //
//                                                                            //
//    eses                   eses                                             //
//   eses                     eses                                            //
//  eses    eseses  esesese    eses   Embedded Systems Group                  //
//  ese    ese  ese ese         ese                                           //
//  ese    eseseses eseseses    ese   Department of Computer Science          //
//  eses   eses          ese   eses                                           //
//   eses   eseses  eseseses  eses    University of Kaiserslautern            //
//    eses                   eses                                             //
//                                                                            //
// ************************************************************************** //


int p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32;
int x,y;
thread EvalPolynomial {
    int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32;
    t0 = +1;
    t1 = x;
    t2 = x;
    t3 = x;
    t4 = x;
    t5 = x;
    t6 = x;
    t7 = x;
    t8 = x;
    t9 = x;
    t10 = x;
    t11 = x;
    t12 = x;
    t13 = x;
    t14 = x;
    t15 = x;
    t16 = x;
    t17 = x;
    t18 = x;
    t19 = x;
    t20 = x;
    t21 = x;
    t22 = x;
    t23 = x;
    t24 = x;
    t25 = x;
    t26 = x;
    t27 = x;
    t28 = x;
    t29 = x;
    t30 = x;
    t31 = x;
    t32 = x;
    // up-level 0
    t1 = t0 * t1;
    t3 = t2 * t3;
    t5 = t4 * t5;
    t7 = t6 * t7;
    t9 = t8 * t9;
    t11 = t10 * t11;
    t13 = t12 * t13;
    t15 = t14 * t15;
    t17 = t16 * t17;
    t19 = t18 * t19;
    t21 = t20 * t21;
    t23 = t22 * t23;
    t25 = t24 * t25;
    t27 = t26 * t27;
    t29 = t28 * t29;
    t31 = t30 * t31;
    // up-level 1
    t3 = t1 * t3;
    t7 = t5 * t7;
    t11 = t9 * t11;
    t15 = t13 * t15;
    t19 = t17 * t19;
    t23 = t21 * t23;
    t27 = t25 * t27;
    t31 = t29 * t31;
    // up-level 2
    t7 = t3 * t7;
    t15 = t11 * t15;
    t23 = t19 * t23;
    t31 = t27 * t31;
    // up-level 3
    t15 = t7 * t15;
    t31 = t23 * t31;
    // up-level 4
    t31 = t15 * t31;
    // up-level 5
    // down-level 6
    // down-level 7
    t23 = t15 * t23;
    // down-level 8
    t11 = t7 * t11;
    t19 = t15 * t19;
    t27 = t23 * t27;
    // down-level 9
    t5 = t3 * t5;
    t9 = t7 * t9;
    t13 = t11 * t13;
    t17 = t15 * t17;
    t21 = t19 * t21;
    t25 = t23 * t25;
    t29 = t27 * t29;
    // down-level 10
    t2 = t1 * t2;
    t4 = t3 * t4;
    t6 = t5 * t6;
    t8 = t7 * t8;
    t10 = t9 * t10;
    t12 = t11 * t12;
    t14 = t13 * t14;
    t16 = t15 * t16;
    t18 = t17 * t18;
    t20 = t19 * t20;
    t22 = t21 * t22;
    t24 = t23 * t24;
    t26 = t25 * t26;
    t28 = t27 * t28;
    t30 = t29 * t30;
    t32 = t31 * t32;
    // multiply p[i] with x^i
    t0 = p0 * t0;
    t1 = p1 * t1;
    t2 = p2 * t2;
    t3 = p3 * t3;
    t4 = p4 * t4;
    t5 = p5 * t5;
    t6 = p6 * t6;
    t7 = p7 * t7;
    t8 = p8 * t8;
    t9 = p9 * t9;
    t10 = p10 * t10;
    t11 = p11 * t11;
    t12 = p12 * t12;
    t13 = p13 * t13;
    t14 = p14 * t14;
    t15 = p15 * t15;
    t16 = p16 * t16;
    t17 = p17 * t17;
    t18 = p18 * t18;
    t19 = p19 * t19;
    t20 = p20 * t20;
    t21 = p21 * t21;
    t22 = p22 * t22;
    t23 = p23 * t23;
    t24 = p24 * t24;
    t25 = p25 * t25;
    t26 = p26 * t26;
    t27 = p27 * t27;
    t28 = p28 * t28;
    t29 = p29 * t29;
    t30 = p30 * t30;
    t31 = p31 * t31;
    t32 = p32 * t32;
    // sum up p[i]*x^i by a binary tree
    // level 0
    t0 = t0 + t1;
    t1 = t2 + t3;
    t2 = t4 + t5;
    t3 = t6 + t7;
    t4 = t8 + t9;
    t5 = t10 + t11;
    t6 = t12 + t13;
    t7 = t14 + t15;
    t8 = t16 + t17;
    t9 = t18 + t19;
    t10 = t20 + t21;
    t11 = t22 + t23;
    t12 = t24 + t25;
    t13 = t26 + t27;
    t14 = t28 + t29;
    t15 = t30 + t31;
    t16 = t32;
    // level 0
    t0 = t0 + t1;
    t1 = t2 + t3;
    t2 = t4 + t5;
    t3 = t6 + t7;
    t4 = t8 + t9;
    t5 = t10 + t11;
    t6 = t12 + t13;
    t7 = t14 + t15;
    t8 = t16;
    // level 0
    t0 = t0 + t1;
    t1 = t2 + t3;
    t2 = t4 + t5;
    t3 = t6 + t7;
    t4 = t8;
    // level 0
    t0 = t0 + t1;
    t1 = t2 + t3;
    t2 = t4;
    // level 0
    t0 = t0 + t1;
    t1 = t2;
    // level 0
    t0 = t0 + t1;
    // final result
    y = t0;
    }