#include<stdio.h>

int g0(int i) { return i ; }
int g1(int i, int j) { return i+j ; }
int g2(int i, int j, int k) { return i+j+k ; }
int g3(int i, int j, int k, int l) { return i+j+k+l ; }

int (*f(int a))(){
   switch(a) {
   case 1: return g1 ;
   case 2: return g2 ;
   case 3: return g3 ;
   default: return g0 ;
}}

main(){
  int i ;
  int (*a[4])() ;

  for (i=0;i<4;i++) a[i] = f(i) ;

  printf("%d\n", a[0](1) ) ;
  printf("%d\n", a[1](1,2) ) ;
  printf("%d\n", a[2](1,2,3) ) ;
  printf("%d\n", a[3](1,2,3,4) ) ;

}
