#include <cstdio>
#include <vector> // чтобы использовать vector <int>
#include <algorithm> // чтобы использовать sort()
#include <functional> // чтобы использовать greater<int>

using namespace std;

// inline - чтобы быстрее работало
inline bool myLess( int a, int b ) // функция сравнивает 2 int-а, возвращает 1 (true), если "a < b"
{
  if (a % 3 == b % 3)
    return a < b;
  return a % 3 < b % 3;
}

template <class T> void Out( int n, T a );

int main()
{
  int a[] = {1, 3, 5, 2, 4}; // массив
  int len = sizeof(a) / sizeof(a[0]); // посчитать длину массива (работает только для массивов, для int* НЕ работает)

  vector <int> b(len); // вектор из len элементов
  copy(a, a + len, b.begin()); // создать вектор b из массива a

  Out(len, a);
  Out(len, b.begin());

  sort(a, a + len); // сортировать элементы массива a [0..len-1]
  sort(b.begin(), b.end()); // сортировать весь вектор b (от begin до end)

  sort(a, a + len, greater<int>()); // сортировать по убыванию
  sort(a, a + len, myLess); // myLess(a, b) == (a < b)

  return 0;
}

template <class T> void Out( int n, T a )
{
  printf("%d:", n);
  while (n--)
    printf(" %d", *a++);
  puts("");
}