using System.Collections.Generic;
public abstract class Animal {
public class Dog: Animal{}
public class Cat: Animal{}
public class AnimalShelter{
public void Enqueue(Animal animal){
if (animal == null) return;
dogs.Enqueue(animal as Dog);
else cats.Enqueue(animal as Cat);
public Animal DequeueAny(){
if (dogs.Count == 0 && cats.Count == 0) return null;
var oldestDogId = dogs.Count == 0 ? int.MaxValue : dogs.Peek().Id;
var oldestCatId = cats.Count == 0 ? int.MaxValue : cats.Peek().Id;
if (oldestDogId < oldestCatId){
else return cats.Dequeue();
return dogs.Count == 0 ? null : dogs.Dequeue();
return cats.Count == 0 ? null : cats.Dequeue();
public static void Main()
var shelter = new AnimalShelter();
Console.WriteLine("Hello World");