#include <stdio.h> 
#include <stdlib.h> 
 
void  print_table( int  row,  int  col,  double  marks[ row] [ col] ) 
{ 
    int  i, j; 
    for ( i= 0 ;  i< row;  i++ ) 
    { 
        for ( j= 0 ;  j< col;  j++ ) 
        { 
            printf ( "%02.1lf " , marks
[ i
] [ j
] ) ;          } 
    } 
} 
 
 
 
int  main( ) 
{ 
    int  number_of_students; 
    printf ( "Enter number of students: " ) ;      scanf ( "%d" ,& number_of_students
) ;   
    char  student_name[ number_of_students] [ 50 ] ; 
    int  i, j; 
 
    for ( i= 0 ;  i< number_of_students;  i++ ) 
    { 
        printf ( "Student %d name: " , i
) ;      } 
 
    for ( i= 0 ;  i< number_of_students;  i++ ) 
    { 
        printf ( "Student %d name: " , i
) ;      } 
 
    int  number_of_courses; 
    printf ( "Enter number of courses: " ) ;      scanf ( "%d" ,& number_of_courses
) ;   
    double  marks[ number_of_students] [ number_of_courses] ; 
 
    for ( i= 0 ;  i< number_of_students;  i++ ) 
    { 
        printf ( "Marks of %s: \n " , student_name
[ i
] ) ;          for ( j= 0 ;  j< number_of_courses;  j++ ) 
        { 
            printf ( "\t ->Mark of course %d: " ,  j
) ;              scanf ( "%lf" ,& marks
[ i
] [ j
] ) ;          } 
    } 
 
    /// Average mark of each student 
    double  total_mark[ number_of_students] ; 
 
    for ( i= 0 ;  i< number_of_students;  i++ ) 
    { 
        total_mark[ i]  =  0 ; 
        for ( j= 0 ;  j< number_of_courses;  j++ ) 
        { 
            total_mark[ i]  +=  marks[ i] [ j] ; 
        } 
        printf ( "Average mark of %s is %0.2lf\n " , student_name
[ i
] , total_mark
[ i
] / number_of_courses
) ;      } 
 
    print_table( number_of_students, number_of_courses, marks) ; 
 
 
    /// highest mark of each student 
    double  highest_student_mark[ number_of_students] ; 
    for ( i= 0 ;  i< number_of_students;  i++ ) 
    { 
        highest_student_mark[ i]  =  marks[ i] [ 0 ] ; 
        for ( j= 0 ;  j< number_of_courses;  j++ ) 
        { 
            if ( highest_student_mark[ i]  <  marks[ i] [ j] ) 
            { 
                highest_student_mark[ i]  =  marks[ i] [ j] ; 
            } 
        } 
        printf ( "Highest mark of %s is %0.2lf\n " , student_name
[ i
] , highest_student_mark
[ i
] ) ;      } 
 
    /// HIGHEST NUMBER OF EACH COURSE 
    double  highest_course_mark[ number_of_students] ; 
    for ( i= 0 ;  i< number_of_courses;  i++ ) 
    { 
        highest_course_mark[ i]  =  - 1 ; 
        for ( j= 0 ;  j< number_of_students;  j++ ) 
        { 
            if ( highest_course_mark[ i]  <  marks[ j] [ i] ) 
            { 
                highest_course_mark[ i]  =  marks[ j] [ i] ; 
            } 
        } 
        printf ( "\n Highest mark of course %d is %0.2lf\n " , i
, highest_course_mark
[ i
] ) ;      } 
    /// subject grade of each student 
 
    return  0 ; 
} 
 
 
				I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnZvaWQgcHJpbnRfdGFibGUoaW50IHJvdywgaW50IGNvbCwgZG91YmxlIG1hcmtzW3Jvd11bY29sXSkKewogICAgaW50IGksajsKICAgIGZvcihpPTA7IGk8cm93OyBpKyspCiAgICB7CiAgICAgICAgZm9yKGo9MDsgajxjb2w7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHByaW50ZigiJTAyLjFsZiAiLG1hcmtzW2ldW2pdKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgfQp9CgoKCmludCBtYWluKCkKewogICAgaW50IG51bWJlcl9vZl9zdHVkZW50czsKICAgIHByaW50ZigiRW50ZXIgbnVtYmVyIG9mIHN0dWRlbnRzOiAiKTsKICAgIHNjYW5mKCIlZCIsJm51bWJlcl9vZl9zdHVkZW50cyk7CgogICAgY2hhciBzdHVkZW50X25hbWVbbnVtYmVyX29mX3N0dWRlbnRzXVs1MF07CiAgICBpbnQgaSxqOwoKICAgIGZvcihpPTA7IGk8bnVtYmVyX29mX3N0dWRlbnRzOyBpKyspCiAgICB7CiAgICAgICAgcHJpbnRmKCJTdHVkZW50ICVkIG5hbWU6ICIsaSk7CiAgICAgICAgZmZsdXNoKHN0ZGluKTsKICAgICAgICBnZXRzKHN0dWRlbnRfbmFtZVtpXSk7CiAgICB9CgogICAgZm9yKGk9MDsgaTxudW1iZXJfb2Zfc3R1ZGVudHM7IGkrKykKICAgIHsKICAgICAgICBwcmludGYoIlN0dWRlbnQgJWQgbmFtZTogIixpKTsKICAgICAgICBwdXRzKHN0dWRlbnRfbmFtZVtpXSk7CiAgICB9CgogICAgaW50IG51bWJlcl9vZl9jb3Vyc2VzOwogICAgcHJpbnRmKCJFbnRlciBudW1iZXIgb2YgY291cnNlczogIik7CiAgICBzY2FuZigiJWQiLCZudW1iZXJfb2ZfY291cnNlcyk7CgogICAgZG91YmxlIG1hcmtzW251bWJlcl9vZl9zdHVkZW50c11bbnVtYmVyX29mX2NvdXJzZXNdOwoKICAgIGZvcihpPTA7IGk8bnVtYmVyX29mX3N0dWRlbnRzOyBpKyspCiAgICB7CiAgICAgICAgcHJpbnRmKCJNYXJrcyBvZiAlczogXG4iLHN0dWRlbnRfbmFtZVtpXSk7CiAgICAgICAgZm9yKGo9MDsgajxudW1iZXJfb2ZfY291cnNlczsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCJcdC0+TWFyayBvZiBjb3Vyc2UgJWQ6ICIsIGopOwogICAgICAgICAgICBzY2FuZigiJWxmIiwmbWFya3NbaV1bal0pOwogICAgICAgIH0KICAgIH0KCiAgICAvLy8gQXZlcmFnZSBtYXJrIG9mIGVhY2ggc3R1ZGVudAogICAgZG91YmxlIHRvdGFsX21hcmtbbnVtYmVyX29mX3N0dWRlbnRzXTsKCiAgICBmb3IoaT0wOyBpPG51bWJlcl9vZl9zdHVkZW50czsgaSsrKQogICAgewogICAgICAgIHRvdGFsX21hcmtbaV0gPSAwOwogICAgICAgIGZvcihqPTA7IGo8bnVtYmVyX29mX2NvdXJzZXM7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHRvdGFsX21hcmtbaV0gKz0gbWFya3NbaV1bal07CiAgICAgICAgfQogICAgICAgIHByaW50ZigiQXZlcmFnZSBtYXJrIG9mICVzIGlzICUwLjJsZlxuIixzdHVkZW50X25hbWVbaV0sdG90YWxfbWFya1tpXS9udW1iZXJfb2ZfY291cnNlcyk7CiAgICB9CgogICAgc3lzdGVtKCJjbHMiKTsKICAgIHByaW50X3RhYmxlKG51bWJlcl9vZl9zdHVkZW50cyxudW1iZXJfb2ZfY291cnNlcyxtYXJrcyk7CgoKICAgIC8vLyBoaWdoZXN0IG1hcmsgb2YgZWFjaCBzdHVkZW50CiAgICBkb3VibGUgaGlnaGVzdF9zdHVkZW50X21hcmtbbnVtYmVyX29mX3N0dWRlbnRzXTsKICAgIGZvcihpPTA7IGk8bnVtYmVyX29mX3N0dWRlbnRzOyBpKyspCiAgICB7CiAgICAgICAgaGlnaGVzdF9zdHVkZW50X21hcmtbaV0gPSBtYXJrc1tpXVswXTsKICAgICAgICBmb3Ioaj0wOyBqPG51bWJlcl9vZl9jb3Vyc2VzOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBpZihoaWdoZXN0X3N0dWRlbnRfbWFya1tpXSA8IG1hcmtzW2ldW2pdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBoaWdoZXN0X3N0dWRlbnRfbWFya1tpXSA9IG1hcmtzW2ldW2pdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHByaW50ZigiSGlnaGVzdCBtYXJrIG9mICVzIGlzICUwLjJsZlxuIixzdHVkZW50X25hbWVbaV0saGlnaGVzdF9zdHVkZW50X21hcmtbaV0pOwogICAgfQoKICAgIC8vLyBISUdIRVNUIE5VTUJFUiBPRiBFQUNIIENPVVJTRQogICAgZG91YmxlIGhpZ2hlc3RfY291cnNlX21hcmtbbnVtYmVyX29mX3N0dWRlbnRzXTsKICAgIGZvcihpPTA7IGk8bnVtYmVyX29mX2NvdXJzZXM7IGkrKykKICAgIHsKICAgICAgICBoaWdoZXN0X2NvdXJzZV9tYXJrW2ldID0gLTE7CiAgICAgICAgZm9yKGo9MDsgajxudW1iZXJfb2Zfc3R1ZGVudHM7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKGhpZ2hlc3RfY291cnNlX21hcmtbaV0gPCBtYXJrc1tqXVtpXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaGlnaGVzdF9jb3Vyc2VfbWFya1tpXSA9IG1hcmtzW2pdW2ldOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHByaW50ZigiXG5IaWdoZXN0IG1hcmsgb2YgY291cnNlICVkIGlzICUwLjJsZlxuIixpLGhpZ2hlc3RfY291cnNlX21hcmtbaV0pOwogICAgfQogICAgLy8vIHN1YmplY3QgZ3JhZGUgb2YgZWFjaCBzdHVkZW50CgogICAgcmV0dXJuIDA7Cn0K