using System;
using System.Collections.Generic;

abstract class Vehicle
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }



    public Vehicle(string make, string model, int year)
    {
        Make = make;
        Model = model;
        Year = year;
    }

    public abstract double CalculateFuelEfficiency(); // Must be implemented by subclasses

    public virtual void DisplayInfo()
    {
        Console.WriteLine($"{Year} {Make} {Model} - Fuel Efficiency: {CalculateFuelEfficiency()} MPG");
    }
}




class Car : Vehicle
{
    public Car(string make, string model, int year) : base(make, model, year) { }

    public override double CalculateFuelEfficiency()
    {
        return 25.0; // Example value
    }
}




class Motorcycle : Vehicle
{
    public Motorcycle(string make, string model, int year) : base(make, model, year) { }

    public override double CalculateFuelEfficiency()
    {
        return 45.0; // Example value
    }
}




class Truck : Vehicle
{
    public Truck(string make, string model, int year) : base(make, model, year) { }

    public override double CalculateFuelEfficiency()
    {
        return 12.0; // Example value
    }
}




class Program
{
    static void Main(string[] args)
    {
        List vehicles = new List
        {
            new Car("Ford", "Mustang", 2020),
            new Motorcycle("Harley", "Davidson", 2019),
            new Truck("Volvo", "FH16", 2022)
        };

        foreach (var v in vehicles)
        {
            v.DisplayInfo(); // Polymorphic call
        }
    }
}