#include<stdio.h> 
#include<stdlib.h> 
 
int  n;  //initial no. of integers in array 
int  * list;  //pointer to the array of integers 
int  * MergeSort( int  * A,  int  x,  int  y) ;  //definition, return type is pointer to integer array 
 
 
void  main( ) 
{ 
	printf ( "Enter the no. of integers in the array: " ) ;   
	list
= ( int  * ) malloc ( n
* sizeof ( int ) ) ;  
	for ( int  i= 0 ; i< n; i++ )  //taking input 
	{ 	
	} 
 
	list= MergeSort( list, 0 , n- 1 ) ;  //calling MergeSort on list from index 0 to index n-1 
 
	for ( int  i= 0 ; i< n; i++ )  //printing output 
	{ 	
	} 
 
} 
 
int  * MergeSort( int  * A,  int  x,  int  y)  //declaration 
{ 
	if ( x== y)  //base case, return the 1-element array itself 
	{ 
		return  A; 
	} 
 
	else 
	{ 
		int  size= 1 + y- x;  //total no. of elements 
		int  half= ( x+ y) / 2 ;  //halving the array 
 
		int  halfsize= ( size/ 2 ) ; 
		int  * A1
= ( int  * ) malloc ( halfsize
* sizeof ( int ) ) ;  		int  * A2
= ( int  * ) malloc ( ( size
- halfsize
) * sizeof ( int ) ) ; 	 		A1= MergeSort( A,  x,  half) ; 			//calling MergeSort on 1st half of array 
		A2= MergeSort( A,  half+ 1 ,  y) ; 		//calling MergeSort on 2nd half of array 
 
 
		int  * C; 									//pointer to 3rd array 
		C
= ( int  * ) malloc ( size
* sizeof ( int ) ) ; 		int  j= 0 ;  			//indicator for first half 
		int  k= 0 ; 			//indicator for 2nd half 
		int  i= 0 ; 			//indicator for 3rd array 
 
 
		while ( ( j<= half) && ( k<= half) ) 			//till all the elements from either half are not exhausted 
		{ 
			if ( A1[ j] <= A2[ k] ) 					//if element of first half is smaller, put that in C 
			{ 
				C[ i] = A1[ j] ; 
				j++; 
			} 
			else 					//otherwise put element of second half in C 
			{ 
				C[ i] = A2[ k] ; 
				k++; 
			} 
			i++; 				//increment indicator for C 
		} 
		int  flag; 
		if ( j== ( half+ 1 ) ) 
		{ 
			flag= 1 ; 
		} 
		else  if ( k== ( half+ 1 ) ) 
		{ 
			flag= 2 ; 
		} 
		if ( flag== 1 )  		//if first half is finished 
		{ 
			while ( i< size)  		//transfer all elements of second half in C 
			{ 
				C[ i] = A2[ k] ; 
				i++; 
				k++; 
			} 
 
		} 
		else  if ( flag== 2 )  //if second half is finished 
		{ 
			while ( i< size)  //transfer all elements of 1st half in C 
			{ 
				C[ i] = A1[ j] ; 
				i++; 
				j++; 
			} 
		} 
 
 
		for ( int  i= x; i<= y; i++ )  //copyback 
		{ 
			A[ x] = C[ i- x] ; 
		} 
		return  A; 
	} 
 
 
} 
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CgppbnQgbjsgLy9pbml0aWFsIG5vLiBvZiBpbnRlZ2VycyBpbiBhcnJheQppbnQgKmxpc3Q7IC8vcG9pbnRlciB0byB0aGUgYXJyYXkgb2YgaW50ZWdlcnMKaW50ICpNZXJnZVNvcnQoaW50ICpBLCBpbnQgeCwgaW50IHkpOyAvL2RlZmluaXRpb24sIHJldHVybiB0eXBlIGlzIHBvaW50ZXIgdG8gaW50ZWdlciBhcnJheQoKCnZvaWQgbWFpbigpCnsKCXByaW50ZigiRW50ZXIgdGhlIG5vLiBvZiBpbnRlZ2VycyBpbiB0aGUgYXJyYXk6ICIpOwoJc2NhbmYoIiVkIiwmbik7CgkKCWxpc3Q9KGludCAqKW1hbGxvYyhuKnNpemVvZihpbnQpKTsKCglmb3IoaW50IGk9MDtpPG47aSsrKSAvL3Rha2luZyBpbnB1dAoJewkKCQlwcmludGYoIlxuRW50ZXIgYSBuby46ICIpOwoJCXNjYW5mKCIlZCIsJmxpc3RbaV0pOwoJfQoKCWxpc3Q9TWVyZ2VTb3J0KGxpc3QsMCxuLTEpOyAvL2NhbGxpbmcgTWVyZ2VTb3J0IG9uIGxpc3QgZnJvbSBpbmRleCAwIHRvIGluZGV4IG4tMQoKCWZvcihpbnQgaT0wO2k8bjtpKyspIC8vcHJpbnRpbmcgb3V0cHV0Cgl7CQoJCXByaW50ZigiJWQgIixsaXN0W2ldKTsKCX0KCQp9CgppbnQgKk1lcmdlU29ydChpbnQgKkEsIGludCB4LCBpbnQgeSkgLy9kZWNsYXJhdGlvbgp7CglpZih4PT15KSAvL2Jhc2UgY2FzZSwgcmV0dXJuIHRoZSAxLWVsZW1lbnQgYXJyYXkgaXRzZWxmCgl7CgkJcmV0dXJuIEE7Cgl9CgoJZWxzZQoJewoJCWludCBzaXplPTEreS14OyAvL3RvdGFsIG5vLiBvZiBlbGVtZW50cwoJCWludCBoYWxmPSh4K3kpLzI7IC8vaGFsdmluZyB0aGUgYXJyYXkKCgkJaW50IGhhbGZzaXplPShzaXplLzIpOwoJCWludCAqQTE9KGludCAqKW1hbGxvYyhoYWxmc2l6ZSpzaXplb2YoaW50KSk7CgkJaW50ICpBMj0oaW50ICopbWFsbG9jKChzaXplLWhhbGZzaXplKSpzaXplb2YoaW50KSk7CQoJCUExPU1lcmdlU29ydChBLCB4LCBoYWxmKTsJCQkvL2NhbGxpbmcgTWVyZ2VTb3J0IG9uIDFzdCBoYWxmIG9mIGFycmF5CgkJQTI9TWVyZ2VTb3J0KEEsIGhhbGYrMSwgeSk7CQkvL2NhbGxpbmcgTWVyZ2VTb3J0IG9uIDJuZCBoYWxmIG9mIGFycmF5CgoJCQoJCWludCAqQzsJCQkJCQkJCQkvL3BvaW50ZXIgdG8gM3JkIGFycmF5CgkJQz0oaW50ICopbWFsbG9jKHNpemUqc2l6ZW9mKGludCkpOwoJCWludCBqPTA7IAkJCS8vaW5kaWNhdG9yIGZvciBmaXJzdCBoYWxmCgkJaW50IGs9MDsJCQkvL2luZGljYXRvciBmb3IgMm5kIGhhbGYKCQlpbnQgaT0wOwkJCS8vaW5kaWNhdG9yIGZvciAzcmQgYXJyYXkKCgkJCgkJd2hpbGUoKGo8PWhhbGYpJiYoazw9aGFsZikpCQkJLy90aWxsIGFsbCB0aGUgZWxlbWVudHMgZnJvbSBlaXRoZXIgaGFsZiBhcmUgbm90IGV4aGF1c3RlZAoJCXsKCQkJaWYoQTFbal08PUEyW2tdKQkJCQkJLy9pZiBlbGVtZW50IG9mIGZpcnN0IGhhbGYgaXMgc21hbGxlciwgcHV0IHRoYXQgaW4gQwoJCQl7CgkJCQlDW2ldPUExW2pdOwoJCQkJaisrOwoJCQl9CgkJCWVsc2UJCQkJCS8vb3RoZXJ3aXNlIHB1dCBlbGVtZW50IG9mIHNlY29uZCBoYWxmIGluIEMKCQkJewoJCQkJQ1tpXT1BMltrXTsKCQkJCWsrKzsKCQkJfQoJCQlpKys7CQkJCS8vaW5jcmVtZW50IGluZGljYXRvciBmb3IgQwoJCX0KCQlpbnQgZmxhZzsKCQlpZihqPT0oaGFsZisxKSkKCQl7CgkJCWZsYWc9MTsKCQl9CgkJZWxzZSBpZihrPT0oaGFsZisxKSkKCQl7CgkJCWZsYWc9MjsKCQl9CgkJaWYoZmxhZz09MSkgCQkvL2lmIGZpcnN0IGhhbGYgaXMgZmluaXNoZWQKCQl7CgkJCXdoaWxlKGk8c2l6ZSkgCQkvL3RyYW5zZmVyIGFsbCBlbGVtZW50cyBvZiBzZWNvbmQgaGFsZiBpbiBDCgkJCXsKCQkJCUNbaV09QTJba107CgkJCQlpKys7CgkJCQlrKys7CgkJCX0KCQkJCgkJfQoJCWVsc2UgaWYoZmxhZz09MikgLy9pZiBzZWNvbmQgaGFsZiBpcyBmaW5pc2hlZAoJCXsKCQkJd2hpbGUoaTxzaXplKSAvL3RyYW5zZmVyIGFsbCBlbGVtZW50cyBvZiAxc3QgaGFsZiBpbiBDCgkJCXsKCQkJCUNbaV09QTFbal07CgkJCQlpKys7CgkJCQlqKys7CgkJCX0KCQl9CgkJCQkKCQkKCQlmb3IoaW50IGk9eDtpPD15O2krKykgLy9jb3B5YmFjawoJCXsKCQkJQVt4XT1DW2kteF07CgkJfQoJCWZyZWUoQTEpOwoJCWZyZWUoQTIpOwoJCWZyZWUoQyk7CgkJcmV0dXJuIEE7Cgl9CgkKCn0=
				
				 
			
				
			
			
				
	
		
	
		 
	prog.c:9:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
 void main()
      ^
prog.c: In function ‘main’:
prog.c:16:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
  for(int i=0;i<n;i++) //taking input
  ^
prog.c:16:2: note: use option -std=c99 or -std=gnu99 to compile your code
prog.c:24:10: error: redefinition of ‘i’
  for(int i=0;i<n;i++) //printing output
          ^
prog.c:16:10: note: previous definition of ‘i’ was here
  for(int i=0;i<n;i++) //taking input
          ^
prog.c:24:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
  for(int i=0;i<n;i++) //printing output
  ^
prog.c: In function ‘MergeSort’:
prog.c:101:11: error: redefinition of ‘i’
   for(int i=x;i<=y;i++) //copyback
           ^
prog.c:54:7: note: previous definition of ‘i’ was here
   int i=0;   //indicator for 3rd array
       ^
prog.c:101:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for(int i=x;i<=y;i++) //copyback
   ^