#include <iostream>
 
template <class T>
void TestDuck(T& duck)
{
    duck.Walk();
    duck.Quack();
}
 
class Duck
{
public:
    void Walk() { std::cout << "Walking...\n"; }
    void Quack() { std::cout << "QUACK!!!\n"; }
};
 
class DuckSimulation
{
public:
    void Walk() { std::cout << "Simulated walking...\n"; }
    void Quack() { std::cout << "Simulated QUACK!!!\n"; }
};
 
int main()
{
    Duck d;
    TestDuck(d);
 
    DuckSimulation sd;
    TestDuck(sd);
}
