#include <iostream>
#include <string>
using namespace std;

template <typename T> //class T
T Min (const T &t1, const T &t2) {
      if (t1 < t2) return t1;
      return t2;
}

/*
template <> 
char* const Min(char* const t1, char* const t2) {
      if (strcmp(t1, t2) < 0) return t1;
      return t2;
}
*/

template <typename T> //class T
T Min (T p[], int n) {
      T m = p[0];
      for (int i=1; i<n; ++i) 
          if (p[i] < m) m = p[i];
      return m;
}


int main() {
    int   i1 = 5, i2 = 7;      cout << Min(i1, i2) << endl;
    char  c1 = 'x', c2 = 'a';  cout << Min(c1, c2) << endl;
    float f1 = 5.0, f2 = 3.3;  cout << Min(f1, f2) << endl;
    string s1="abc", s2="axy"; cout << Min(s1, s2) << endl;
//    char p1[]="abc"; char p2[]="axy"; //cout << Min(p1, p2) << endl;
    int p[] = {3,2,1,4,5}; cout << Min(p, 5) << endl;
}
