#include <iostream>
class Animal {
 protected:
  int a;
 public:
  friend void Swap(Animal &A,Animal &B);
  int GetA() const { return a; }
};

void Swap(Animal &A, Animal &B) {
  int i = A.a;
  A.a = B.a;
  B.a = i;
}

class People : public Animal
{
  public:
    People() {
      a = 1;
    }
};

class Fish : public Animal
{
  public:
    Fish() {
      a = 2;
    }
};

Animal *gA, *gB;

int main() {
  gA = new People;
  gB = new Fish;
  std::cout << gA->GetA() << ", " << gB->GetA() << std::endl;;
  Swap(*gA, *gB);
  std::cout << gA->GetA() << ", " << gB->GetA() << std::endl;
  return 0;
}
