using System;
using System.Linq;
public class Test
{
private const int Size = 8;
public static void Main()
{
Console.WriteLine(string.Join("\n", new[] { GetNose(), GetBody(), GetNose() }));
}
private static string GetNose()
{
return string.Join("\n", Enumerable.Range(0, 2 * Size - 1).Select(GetNoseLine).ToArray());
}
private static string GetNoseLine(int n)
{
return GetNoseHalfLine(n) + new string(Flip(GetNoseHalfLine(n)).Reverse().ToArray());
}
private static string GetNoseHalfLine(int n)
{
return string.Join("", Enumerable.Range(0, n).Select(_ => "/").ToArray()).PadLeft(2 * Size, ' ') + "*";
}
private static string GetBody()
{
var bar = "+" + string.Join("", Enumerable.Range(0, 2 * Size).Select(_ => "=*").ToArray()) + "+";
return string.Join("\n", new[] { bar, GetTop(), GetBottom(), bar, GetBottom(), GetTop(), bar });
}
private static string Flip(string line)
{
return new string(line.Select(c => c == '/' ? '\\' : c == '\\' ? '/' : c).ToArray());
}
private static string GetTop()
{
return string.Join("\n", Enumerable.Range(1, Size).Select(GetLine).ToArray());
}
private static string GetBottom()
{
return string.Join("\n", Enumerable.Range(1, Size).Reverse().Select(GetLine).Select(Flip).ToArray());
}
private static string GetLine(int n)
{
return "|" + GetHalfLine(n) + GetHalfLine(n) + "|";
}
private static string GetHalfLine(int n)
{
return string.Join("", Enumerable.Range(0, n).Select(_ => @"/\").ToArray()).PadLeft(Size + n, '.').PadRight(2 * Size, '.');
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXByaXZhdGUgY29uc3QgaW50IFNpemUgPSA4OwoJCglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkgICAgQ29uc29sZS5Xcml0ZUxpbmUoc3RyaW5nLkpvaW4oIlxuIiwgbmV3W10geyBHZXROb3NlKCksIEdldEJvZHkoKSwgR2V0Tm9zZSgpIH0pKTsKCX0KCQoJcHJpdmF0ZSBzdGF0aWMgc3RyaW5nIEdldE5vc2UoKQoJewoJICAgIHJldHVybiBzdHJpbmcuSm9pbigiXG4iLCBFbnVtZXJhYmxlLlJhbmdlKDAsIDIgKiBTaXplIC0gMSkuU2VsZWN0KEdldE5vc2VMaW5lKS5Ub0FycmF5KCkpOwoJfQoJCglwcml2YXRlIHN0YXRpYyBzdHJpbmcgR2V0Tm9zZUxpbmUoaW50IG4pCgl7CgkgICAgcmV0dXJuIEdldE5vc2VIYWxmTGluZShuKSArIG5ldyBzdHJpbmcoRmxpcChHZXROb3NlSGFsZkxpbmUobikpLlJldmVyc2UoKS5Ub0FycmF5KCkpOwoJfQoJCglwcml2YXRlIHN0YXRpYyBzdHJpbmcgR2V0Tm9zZUhhbGZMaW5lKGludCBuKQoJewoJICAgIHJldHVybiBzdHJpbmcuSm9pbigiIiwgRW51bWVyYWJsZS5SYW5nZSgwLCBuKS5TZWxlY3QoXyA9PiAiLyIpLlRvQXJyYXkoKSkuUGFkTGVmdCgyICogU2l6ZSwgJyAnKSArICIqIjsKCX0KCQoJcHJpdmF0ZSBzdGF0aWMgc3RyaW5nIEdldEJvZHkoKQoJewoJICAgIHZhciBiYXIgPSAiKyIgKyBzdHJpbmcuSm9pbigiIiwgRW51bWVyYWJsZS5SYW5nZSgwLCAyICogU2l6ZSkuU2VsZWN0KF8gPT4gIj0qIikuVG9BcnJheSgpKSArICIrIjsKCSAgICByZXR1cm4gc3RyaW5nLkpvaW4oIlxuIiwgbmV3W10geyBiYXIsIEdldFRvcCgpLCBHZXRCb3R0b20oKSwgYmFyLCBHZXRCb3R0b20oKSwgR2V0VG9wKCksIGJhciB9KTsKCX0KCQoJcHJpdmF0ZSBzdGF0aWMgc3RyaW5nIEZsaXAoc3RyaW5nIGxpbmUpCgl7CgkgICAgcmV0dXJuIG5ldyBzdHJpbmcobGluZS5TZWxlY3QoYyA9PiBjID09ICcvJyA/ICdcXCcgOiBjID09ICdcXCcgPyAnLycgOiBjKS5Ub0FycmF5KCkpOwoJfQoJCglwcml2YXRlIHN0YXRpYyBzdHJpbmcgR2V0VG9wKCkKCXsKCSAgICByZXR1cm4gc3RyaW5nLkpvaW4oIlxuIiwgRW51bWVyYWJsZS5SYW5nZSgxLCBTaXplKS5TZWxlY3QoR2V0TGluZSkuVG9BcnJheSgpKTsKCX0KCQoJcHJpdmF0ZSBzdGF0aWMgc3RyaW5nIEdldEJvdHRvbSgpCgl7CgkgICAgcmV0dXJuIHN0cmluZy5Kb2luKCJcbiIsIEVudW1lcmFibGUuUmFuZ2UoMSwgU2l6ZSkuUmV2ZXJzZSgpLlNlbGVjdChHZXRMaW5lKS5TZWxlY3QoRmxpcCkuVG9BcnJheSgpKTsKCX0KCQoJcHJpdmF0ZSBzdGF0aWMgc3RyaW5nIEdldExpbmUoaW50IG4pCgl7CgkgICAgcmV0dXJuICAifCIgKyBHZXRIYWxmTGluZShuKSArIEdldEhhbGZMaW5lKG4pICsgInwiOwoJfQoJCglwcml2YXRlIHN0YXRpYyBzdHJpbmcgR2V0SGFsZkxpbmUoaW50IG4pCgl7CgkgICAgcmV0dXJuIHN0cmluZy5Kb2luKCIiLCBFbnVtZXJhYmxlLlJhbmdlKDAsIG4pLlNlbGVjdChfID0+IEAiL1wiKS5Ub0FycmF5KCkpLlBhZExlZnQoU2l6ZSArIG4sICcuJykuUGFkUmlnaHQoMiAqIFNpemUsICcuJyk7Cgl9Cn0=