using System.Collections.Generic;
public abstract class PatternPrinter
private int patternLength;
public PatternPrinter(int patternLength)
this.patternLength = patternLength;
Random rnd = new Random();
int specialIndex = rnd.Next(patternLength);
for (int i = 0; i < patternLength; i++)
public abstract void PrintNormal();
public abstract void PrintVariant();
public abstract void PrintSpecial();
public class RiverPattern : PatternPrinter
public RiverPattern(int patternLength): base (patternLength)
public override void PrintNormal()
for(int i = 0; i < 4; i++){
Console.WriteLine("***O O***\n");
public override void PrintVariant()
Console.WriteLine("**O O****\n");
Console.WriteLine("*O O*****\n");
Console.WriteLine("**O O****\n");
Console.WriteLine("***O O***\n");
public override void PrintSpecial()
Console.WriteLine("**O O***\n");
Console.WriteLine("*O O**\n");
Console.WriteLine("*O OO O*\n");
Console.WriteLine("*O O O*\n");
Console.WriteLine("**O O**\n");
public static void Main()
RiverPattern river = new RiverPattern(10);