using System;
using System.Collections.Generic;

namespace AnimalSimulator
{
    // Abstract base class
    public abstract class Animal
    {
        public string Name { get; set; }

        public Animal(string name)
        {
            Name = name;
        }

        public abstract void MakeSound();
    }

    public class Dog : Animal
    {
        public Dog(string name) : base(name) { }

        public override void MakeSound()
        {
            Console.WriteLine($"{Name} says: Woof!");
        }
    }

    public class Cat : Animal
    {
        public Cat(string name) : base(name) { }

        public override void MakeSound()
        {
            Console.WriteLine($"{Name} says: Meow!");
        }
    }

    public class Cow : Animal
    {
        public Cow(string name) : base(name) { }

        public override void MakeSound()
        {
            Console.WriteLine($"{Name} says: Moo!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            List animals = new List
            {
                new Dog("Buddy"),
                new Cat("Whiskers"),
                new Cow("Bessie")
            };

            foreach (Animal animal in animals)
            {
                animal.MakeSound();
            }
        }
    }
}