//******************************************************** 
// 
// Assignment 7 - Structures and Strings 
// 
// Name: Jacquelin saint Lucien 
// 
// Class: C Programming, Fall 2025 
// 
// Date: <replace with the current date> 
// 
// Description: Program which determines overtime and  
// gross pay for a set of employees with outputs sent  
// to standard output (the screen). 
// 
// This assignment also adds the employee name, their tax state, 
// and calculates the state tax, federal tax, and net pay.   It 
// also calculates totals, averages, minimum, and maximum values. 
// 
// Call by Reference design 
// 
//******************************************************** 
#include <stdio.h> 
#include <string.h> 
 
#define NAME_LEN 10 
#define STATE_LEN 3 
#define MAX_EMPLOYEES 5    
 
// Structure to hold first and last name 
struct  name { 
    char  firstName[ NAME_LEN] ; 
    char  lastName[ NAME_LEN] ; 
} ; 
 
// Structure to hold employee info 
struct  employee { 
    struct  name empName; 
    char  taxState[ STATE_LEN] ; 
    long  int  clockNumber; 
    float  wageRate; 
    float  hours; 
    float  overTimeHrs; 
    float  grossPay; 
    float  stateTax; 
    float  fedTax; 
    float  netPay; 
} ; 
 
// Function prototypes 
float  computeStateTaxRate( char  state[ ] ) ; 
float  findMin( float  values[ ] ,  int  n) ; 
float  findMax( float  values[ ] ,  int  n) ; 
float  findAverage( float  values[ ] ,  int  n) ; 
float  findTotal( float  values[ ] ,  int  n) ; 
 
int  main( void ) 
{ 
    struct  employee employees[ MAX_EMPLOYEES] ; 
    int  i,  count; 
 
    printf ( "Enter number of employees (max %d): " ,  MAX_EMPLOYEES
) ;   
    // Input data 
    for  ( i =  0 ;  i <  count;  i++ ) 
    { 
        printf ( "\n --- Employee %d ---\n " ,  i 
+  1 ) ;          scanf ( "%s" ,  employees
[ i
] .
empName .
firstName ) ;          scanf ( "%s" ,  employees
[ i
] .
empName .
lastName ) ;          scanf ( "%ld" ,  & employees
[ i
] .
clockNumber ) ;          printf ( "State (MA, NH, VT, CA, or other): " ) ;          scanf ( "%s" ,  employees
[ i
] .
taxState ) ;          scanf ( "%f" ,  & employees
[ i
] .
wageRate ) ;          scanf ( "%f" ,  & employees
[ i
] .
hours ) ;          scanf ( "%f" ,  & employees
[ i
] .
overTimeHrs ) ;   
        // Compute gross pay (normal + overtime) 
        employees[ i] .grossPay  =  ( employees[ i] .wageRate  *  employees[ i] .hours )  + 
                                ( employees[ i] .wageRate  *  1.5  *  employees[ i] .overTimeHrs ) ; 
 
        // State and federal taxes 
        float  stateRate =  computeStateTaxRate( employees[ i] .taxState ) ; 
        employees[ i] .stateTax  =  employees[ i] .grossPay  *  stateRate; 
        employees[ i] .fedTax  =  employees[ i] .grossPay  *  0.25f ; 
 
        // Net pay 
        employees[ i] .netPay  =  employees[ i] .grossPay  -  ( employees[ i] .stateTax  +  employees[ i] .fedTax ) ; 
    } 
 
    // Display report 
    printf ( "\n \n ------------------------------------------------------------\n " ) ;      printf ( "CLOCK#   NAME                STATE  GROSS     STATE TAX  FED TAX   NET PAY\n " ) ;      printf ( "------------------------------------------------------------\n " ) ;      for  ( i =  0 ;  i <  count;  i++ ) 
    { 
        printf ( "%06ld   %-10s %-10s %-3s   %8.2f  %8.2f  %8.2f  %8.2f\n " ,                 employees[ i] .clockNumber , 
               employees[ i] .empName .firstName , 
               employees[ i] .empName .lastName , 
               employees[ i] .taxState , 
               employees[ i] .grossPay , 
               employees[ i] .stateTax , 
               employees[ i] .fedTax , 
               employees[ i] .netPay ) ; 
    } 
    printf ( "------------------------------------------------------------\n " ) ;   
    // Summary statistics arrays 
    float  grossArr[ MAX_EMPLOYEES] ,  stateArr[ MAX_EMPLOYEES] ,  fedArr[ MAX_EMPLOYEES] ,  netArr[ MAX_EMPLOYEES] ; 
 
    for  ( i =  0 ;  i <  count;  i++ ) 
    { 
        grossArr[ i]  =  employees[ i] .grossPay ; 
        stateArr[ i]  =  employees[ i] .stateTax ; 
        fedArr[ i]  =  employees[ i] .fedTax ; 
        netArr[ i]  =  employees[ i] .netPay ; 
    } 
 
    // Display summary 
    printf ( "\n \n ==================== SUMMARY STATISTICS ====================\n " ) ;      printf ( "Category      TOTAL       AVG        MIN        MAX\n " ) ;      printf ( "------------------------------------------------------------\n " ) ;      printf ( "Gross Pay  %10.2f  %8.2f  %8.2f  %8.2f\n " ,             findTotal( grossArr,  count) ,  findAverage( grossArr,  count) ,  findMin( grossArr,  count) ,  findMax( grossArr,  count) ) ; 
    printf ( "State Tax  %10.2f  %8.2f  %8.2f  %8.2f\n " ,             findTotal( stateArr,  count) ,  findAverage( stateArr,  count) ,  findMin( stateArr,  count) ,  findMax( stateArr,  count) ) ; 
    printf ( "Fed Tax    %10.2f  %8.2f  %8.2f  %8.2f\n " ,             findTotal( fedArr,  count) ,  findAverage( fedArr,  count) ,  findMin( fedArr,  count) ,  findMax( fedArr,  count) ) ; 
    printf ( "Net Pay    %10.2f  %8.2f  %8.2f  %8.2f\n " ,             findTotal( netArr,  count) ,  findAverage( netArr,  count) ,  findMin( netArr,  count) ,  findMax( netArr,  count) ) ; 
    printf ( "------------------------------------------------------------\n " ) ;   
    return  0 ; 
} 
 
// Function to compute state tax rate based on code 
float  computeStateTaxRate( char  state[ ] ) 
{ 
    if  ( strcmp ( state
,  "MA" )  ==  0 )  return  0.05f ;      else  if  ( strcmp ( state
,  "NH" )  ==  0 )  return  0.00f ;      else  if  ( strcmp ( state
,  "VT" )  ==  0 )  return  0.06f ;      else  if  ( strcmp ( state
,  "CA" )  ==  0 )  return  0.07f ;      else  return  0.08f ; 
} 
 
// Summary calculation functions 
float  findTotal( float  values[ ] ,  int  n) 
{ 
    float  sum =  0.0f ; 
    for  ( int  i =  0 ;  i <  n;  i++ ) 
        sum +=  values[ i] ; 
    return  sum; 
} 
 
float  findAverage( float  values[ ] ,  int  n) 
{ 
    return  findTotal( values,  n)  /  n; 
} 
 
float  findMin( float  values[ ] ,  int  n) 
{ 
    float  min =  values[ 0 ] ; 
    for  ( int  i =  1 ;  i <  n;  i++ ) 
        if  ( values[ i]  <  min)  min =  values[ i] ; 
    return  min; 
} 
 
float  findMax( float  values[ ] ,  int  n) 
{ 
    float  max =  values[ 0 ] ; 
    for  ( int  i =  1 ;  i <  n;  i++ ) 
        if  ( values[ i]  >  max)  max =  values[ i] ; 
    return  max; 
} 
 
 
				Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLwovLyBBc3NpZ25tZW50IDcgLSBTdHJ1Y3R1cmVzIGFuZCBTdHJpbmdzCi8vCi8vIE5hbWU6IEphY3F1ZWxpbiBzYWludCBMdWNpZW4KLy8KLy8gQ2xhc3M6IEMgUHJvZ3JhbW1pbmcsIEZhbGwgMjAyNQovLwovLyBEYXRlOiA8cmVwbGFjZSB3aXRoIHRoZSBjdXJyZW50IGRhdGU+Ci8vCi8vIERlc2NyaXB0aW9uOiBQcm9ncmFtIHdoaWNoIGRldGVybWluZXMgb3ZlcnRpbWUgYW5kIAovLyBncm9zcyBwYXkgZm9yIGEgc2V0IG9mIGVtcGxveWVlcyB3aXRoIG91dHB1dHMgc2VudCAKLy8gdG8gc3RhbmRhcmQgb3V0cHV0ICh0aGUgc2NyZWVuKS4KLy8KLy8gVGhpcyBhc3NpZ25tZW50IGFsc28gYWRkcyB0aGUgZW1wbG95ZWUgbmFtZSwgdGhlaXIgdGF4IHN0YXRlLAovLyBhbmQgY2FsY3VsYXRlcyB0aGUgc3RhdGUgdGF4LCBmZWRlcmFsIHRheCwgYW5kIG5ldCBwYXkuICAgSXQKLy8gYWxzbyBjYWxjdWxhdGVzIHRvdGFscywgYXZlcmFnZXMsIG1pbmltdW0sIGFuZCBtYXhpbXVtIHZhbHVlcy4KLy8KLy8gQ2FsbCBieSBSZWZlcmVuY2UgZGVzaWduCi8vCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTkFNRV9MRU4gMTAKI2RlZmluZSBTVEFURV9MRU4gMwojZGVmaW5lIE1BWF9FTVBMT1lFRVMgNSAgIAoKLy8gU3RydWN0dXJlIHRvIGhvbGQgZmlyc3QgYW5kIGxhc3QgbmFtZQpzdHJ1Y3QgbmFtZSB7CiAgICBjaGFyIGZpcnN0TmFtZVtOQU1FX0xFTl07CiAgICBjaGFyIGxhc3ROYW1lW05BTUVfTEVOXTsKfTsKCi8vIFN0cnVjdHVyZSB0byBob2xkIGVtcGxveWVlIGluZm8Kc3RydWN0IGVtcGxveWVlIHsKICAgIHN0cnVjdCBuYW1lIGVtcE5hbWU7CiAgICBjaGFyIHRheFN0YXRlW1NUQVRFX0xFTl07CiAgICBsb25nIGludCBjbG9ja051bWJlcjsKICAgIGZsb2F0IHdhZ2VSYXRlOwogICAgZmxvYXQgaG91cnM7CiAgICBmbG9hdCBvdmVyVGltZUhyczsKICAgIGZsb2F0IGdyb3NzUGF5OwogICAgZmxvYXQgc3RhdGVUYXg7CiAgICBmbG9hdCBmZWRUYXg7CiAgICBmbG9hdCBuZXRQYXk7Cn07CgovLyBGdW5jdGlvbiBwcm90b3R5cGVzCmZsb2F0IGNvbXB1dGVTdGF0ZVRheFJhdGUoY2hhciBzdGF0ZVtdKTsKZmxvYXQgZmluZE1pbihmbG9hdCB2YWx1ZXNbXSwgaW50IG4pOwpmbG9hdCBmaW5kTWF4KGZsb2F0IHZhbHVlc1tdLCBpbnQgbik7CmZsb2F0IGZpbmRBdmVyYWdlKGZsb2F0IHZhbHVlc1tdLCBpbnQgbik7CmZsb2F0IGZpbmRUb3RhbChmbG9hdCB2YWx1ZXNbXSwgaW50IG4pOwoKaW50IG1haW4odm9pZCkKewogICAgc3RydWN0IGVtcGxveWVlIGVtcGxveWVlc1tNQVhfRU1QTE9ZRUVTXTsKICAgIGludCBpLCBjb3VudDsKCiAgICBwcmludGYoIkVudGVyIG51bWJlciBvZiBlbXBsb3llZXMgKG1heCAlZCk6ICIsIE1BWF9FTVBMT1lFRVMpOwogICAgc2NhbmYoIiVkIiwgJmNvdW50KTsKCiAgICAvLyBJbnB1dCBkYXRhCiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgIHsKICAgICAgICBwcmludGYoIlxuLS0tIEVtcGxveWVlICVkIC0tLVxuIiwgaSArIDEpOwogICAgICAgIHByaW50ZigiRmlyc3QgTmFtZTogIik7CiAgICAgICAgc2NhbmYoIiVzIiwgZW1wbG95ZWVzW2ldLmVtcE5hbWUuZmlyc3ROYW1lKTsKICAgICAgICBwcmludGYoIkxhc3QgTmFtZTogIik7CiAgICAgICAgc2NhbmYoIiVzIiwgZW1wbG95ZWVzW2ldLmVtcE5hbWUubGFzdE5hbWUpOwogICAgICAgIHByaW50ZigiQ2xvY2sgTnVtYmVyOiAiKTsKICAgICAgICBzY2FuZigiJWxkIiwgJmVtcGxveWVlc1tpXS5jbG9ja051bWJlcik7CiAgICAgICAgcHJpbnRmKCJTdGF0ZSAoTUEsIE5ILCBWVCwgQ0EsIG9yIG90aGVyKTogIik7CiAgICAgICAgc2NhbmYoIiVzIiwgZW1wbG95ZWVzW2ldLnRheFN0YXRlKTsKICAgICAgICBwcmludGYoIkhvdXJseSBXYWdlIFJhdGU6ICIpOwogICAgICAgIHNjYW5mKCIlZiIsICZlbXBsb3llZXNbaV0ud2FnZVJhdGUpOwogICAgICAgIHByaW50ZigiSG91cnMgV29ya2VkOiAiKTsKICAgICAgICBzY2FuZigiJWYiLCAmZW1wbG95ZWVzW2ldLmhvdXJzKTsKICAgICAgICBwcmludGYoIk92ZXJ0aW1lIEhvdXJzOiAiKTsKICAgICAgICBzY2FuZigiJWYiLCAmZW1wbG95ZWVzW2ldLm92ZXJUaW1lSHJzKTsKCiAgICAgICAgLy8gQ29tcHV0ZSBncm9zcyBwYXkgKG5vcm1hbCArIG92ZXJ0aW1lKQogICAgICAgIGVtcGxveWVlc1tpXS5ncm9zc1BheSA9IChlbXBsb3llZXNbaV0ud2FnZVJhdGUgKiBlbXBsb3llZXNbaV0uaG91cnMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW1wbG95ZWVzW2ldLndhZ2VSYXRlICogMS41ICogZW1wbG95ZWVzW2ldLm92ZXJUaW1lSHJzKTsKCiAgICAgICAgLy8gU3RhdGUgYW5kIGZlZGVyYWwgdGF4ZXMKICAgICAgICBmbG9hdCBzdGF0ZVJhdGUgPSBjb21wdXRlU3RhdGVUYXhSYXRlKGVtcGxveWVlc1tpXS50YXhTdGF0ZSk7CiAgICAgICAgZW1wbG95ZWVzW2ldLnN0YXRlVGF4ID0gZW1wbG95ZWVzW2ldLmdyb3NzUGF5ICogc3RhdGVSYXRlOwogICAgICAgIGVtcGxveWVlc1tpXS5mZWRUYXggPSBlbXBsb3llZXNbaV0uZ3Jvc3NQYXkgKiAwLjI1ZjsKCiAgICAgICAgLy8gTmV0IHBheQogICAgICAgIGVtcGxveWVlc1tpXS5uZXRQYXkgPSBlbXBsb3llZXNbaV0uZ3Jvc3NQYXkgLSAoZW1wbG95ZWVzW2ldLnN0YXRlVGF4ICsgZW1wbG95ZWVzW2ldLmZlZFRheCk7CiAgICB9CgogICAgLy8gRGlzcGxheSByZXBvcnQKICAgIHByaW50ZigiXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAgICBwcmludGYoIkNMT0NLIyAgIE5BTUUgICAgICAgICAgICAgICAgU1RBVEUgIEdST1NTICAgICBTVEFURSBUQVggIEZFRCBUQVggICBORVQgUEFZXG4iKTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgewogICAgICAgIHByaW50ZigiJTA2bGQgICAlLTEwcyAlLTEwcyAlLTNzICAgJTguMmYgICU4LjJmICAlOC4yZiAgJTguMmZcbiIsCiAgICAgICAgICAgICAgIGVtcGxveWVlc1tpXS5jbG9ja051bWJlciwKICAgICAgICAgICAgICAgZW1wbG95ZWVzW2ldLmVtcE5hbWUuZmlyc3ROYW1lLAogICAgICAgICAgICAgICBlbXBsb3llZXNbaV0uZW1wTmFtZS5sYXN0TmFtZSwKICAgICAgICAgICAgICAgZW1wbG95ZWVzW2ldLnRheFN0YXRlLAogICAgICAgICAgICAgICBlbXBsb3llZXNbaV0uZ3Jvc3NQYXksCiAgICAgICAgICAgICAgIGVtcGxveWVlc1tpXS5zdGF0ZVRheCwKICAgICAgICAgICAgICAgZW1wbG95ZWVzW2ldLmZlZFRheCwKICAgICAgICAgICAgICAgZW1wbG95ZWVzW2ldLm5ldFBheSk7CiAgICB9CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CgogICAgLy8gU3VtbWFyeSBzdGF0aXN0aWNzIGFycmF5cwogICAgZmxvYXQgZ3Jvc3NBcnJbTUFYX0VNUExPWUVFU10sIHN0YXRlQXJyW01BWF9FTVBMT1lFRVNdLCBmZWRBcnJbTUFYX0VNUExPWUVFU10sIG5ldEFycltNQVhfRU1QTE9ZRUVTXTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgIHsKICAgICAgICBncm9zc0FycltpXSA9IGVtcGxveWVlc1tpXS5ncm9zc1BheTsKICAgICAgICBzdGF0ZUFycltpXSA9IGVtcGxveWVlc1tpXS5zdGF0ZVRheDsKICAgICAgICBmZWRBcnJbaV0gPSBlbXBsb3llZXNbaV0uZmVkVGF4OwogICAgICAgIG5ldEFycltpXSA9IGVtcGxveWVlc1tpXS5uZXRQYXk7CiAgICB9CgogICAgLy8gRGlzcGxheSBzdW1tYXJ5CiAgICBwcmludGYoIlxuXG49PT09PT09PT09PT09PT09PT09PSBTVU1NQVJZIFNUQVRJU1RJQ1MgPT09PT09PT09PT09PT09PT09PT1cbiIpOwogICAgcHJpbnRmKCJDYXRlZ29yeSAgICAgIFRPVEFMICAgICAgIEFWRyAgICAgICAgTUlOICAgICAgICBNQVhcbiIpOwogICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgcHJpbnRmKCJHcm9zcyBQYXkgICUxMC4yZiAgJTguMmYgICU4LjJmICAlOC4yZlxuIiwKICAgICAgICAgICBmaW5kVG90YWwoZ3Jvc3NBcnIsIGNvdW50KSwgZmluZEF2ZXJhZ2UoZ3Jvc3NBcnIsIGNvdW50KSwgZmluZE1pbihncm9zc0FyciwgY291bnQpLCBmaW5kTWF4KGdyb3NzQXJyLCBjb3VudCkpOwogICAgcHJpbnRmKCJTdGF0ZSBUYXggICUxMC4yZiAgJTguMmYgICU4LjJmICAlOC4yZlxuIiwKICAgICAgICAgICBmaW5kVG90YWwoc3RhdGVBcnIsIGNvdW50KSwgZmluZEF2ZXJhZ2Uoc3RhdGVBcnIsIGNvdW50KSwgZmluZE1pbihzdGF0ZUFyciwgY291bnQpLCBmaW5kTWF4KHN0YXRlQXJyLCBjb3VudCkpOwogICAgcHJpbnRmKCJGZWQgVGF4ICAgICUxMC4yZiAgJTguMmYgICU4LjJmICAlOC4yZlxuIiwKICAgICAgICAgICBmaW5kVG90YWwoZmVkQXJyLCBjb3VudCksIGZpbmRBdmVyYWdlKGZlZEFyciwgY291bnQpLCBmaW5kTWluKGZlZEFyciwgY291bnQpLCBmaW5kTWF4KGZlZEFyciwgY291bnQpKTsKICAgIHByaW50ZigiTmV0IFBheSAgICAlMTAuMmYgICU4LjJmICAlOC4yZiAgJTguMmZcbiIsCiAgICAgICAgICAgZmluZFRvdGFsKG5ldEFyciwgY291bnQpLCBmaW5kQXZlcmFnZShuZXRBcnIsIGNvdW50KSwgZmluZE1pbihuZXRBcnIsIGNvdW50KSwgZmluZE1heChuZXRBcnIsIGNvdW50KSk7CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CgogICAgcmV0dXJuIDA7Cn0KCi8vIEZ1bmN0aW9uIHRvIGNvbXB1dGUgc3RhdGUgdGF4IHJhdGUgYmFzZWQgb24gY29kZQpmbG9hdCBjb21wdXRlU3RhdGVUYXhSYXRlKGNoYXIgc3RhdGVbXSkKewogICAgaWYgKHN0cmNtcChzdGF0ZSwgIk1BIikgPT0gMCkgcmV0dXJuIDAuMDVmOwogICAgZWxzZSBpZiAoc3RyY21wKHN0YXRlLCAiTkgiKSA9PSAwKSByZXR1cm4gMC4wMGY7CiAgICBlbHNlIGlmIChzdHJjbXAoc3RhdGUsICJWVCIpID09IDApIHJldHVybiAwLjA2ZjsKICAgIGVsc2UgaWYgKHN0cmNtcChzdGF0ZSwgIkNBIikgPT0gMCkgcmV0dXJuIDAuMDdmOwogICAgZWxzZSByZXR1cm4gMC4wOGY7Cn0KCi8vIFN1bW1hcnkgY2FsY3VsYXRpb24gZnVuY3Rpb25zCmZsb2F0IGZpbmRUb3RhbChmbG9hdCB2YWx1ZXNbXSwgaW50IG4pCnsKICAgIGZsb2F0IHN1bSA9IDAuMGY7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICBzdW0gKz0gdmFsdWVzW2ldOwogICAgcmV0dXJuIHN1bTsKfQoKZmxvYXQgZmluZEF2ZXJhZ2UoZmxvYXQgdmFsdWVzW10sIGludCBuKQp7CiAgICByZXR1cm4gZmluZFRvdGFsKHZhbHVlcywgbikgLyBuOwp9CgpmbG9hdCBmaW5kTWluKGZsb2F0IHZhbHVlc1tdLCBpbnQgbikKewogICAgZmxvYXQgbWluID0gdmFsdWVzWzBdOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspCiAgICAgICAgaWYgKHZhbHVlc1tpXSA8IG1pbikgbWluID0gdmFsdWVzW2ldOwogICAgcmV0dXJuIG1pbjsKfQoKZmxvYXQgZmluZE1heChmbG9hdCB2YWx1ZXNbXSwgaW50IG4pCnsKICAgIGZsb2F0IG1heCA9IHZhbHVlc1swXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKQogICAgICAgIGlmICh2YWx1ZXNbaV0gPiBtYXgpIG1heCA9IHZhbHVlc1tpXTsKICAgIHJldHVybiBtYXg7Cn0K