#include<iostream>
using namespace std;

template<typename T> T  max(T a,T b)   {cerr<<"T "<<endl;return (a>b)?a:b;}

template<typename T> T max(T *data,size_t n) {
T _max = data[0];
 cerr<<"T[]"<<endl;
for(size_t i=0;i<n;++i)
	if(data[i]>_max) 
	  _max=data[i];
return _max;
}

template<typename T> T* max(T *a,T *b) {cerr<<"T*"<<endl;return ((*a)>(*b))?a:b;}

template<> char * max(char *a,char *b) {cerr<<"S1"<<endl;return (strcmp(a,b)>0)?a:b;}
template<> const char * max(const char *a,const char *b) {cerr<<"S2"<<endl;return (strcmp(a,b)>0)?a:b;}

//template<typename T> const T *max(const T *a,T *b) {return ((*a)>(*b))?a:b;};
//template<>  const char * max(const char *a, char *b) {cerr<<"S2"<<endl;return (strcmp(a,b)>0)?a:b;}
main() {

int i=0;
int j=5;



char *p1 = new char[5];
char *p2 = new char[5];
strncpy(p1,"ania",5);
strncpy(p2,"asia",5);
cout<<::max("asia","ania")<<endl;
cout<<::max(p1,p2)<<endl;
//cout<<::max("asia",p1)<<endl;

}
