namespace Day20; public abstract class Module { public string Name { get; } protected readonly List _outputs = new List(); protected readonly List _inputs = new List(); public IEnumerable Inputs => _inputs; protected Module(string name) { Name = name; } public abstract string GetState(); public abstract IEnumerable Process(Pulse p); public virtual void Reset() {} public void AddOutput(Module destination) { _outputs.Add(destination); } public void AddInput(Module source) { _inputs.Add(source); } }