open System
let rec value (layer,row,pos) =
if pos = 0 || pos = (row + 1) || row = 0 || row = (layer + 1) then 0
elif layer = 1 then 1
else (value (layer-1,row, pos)) + (value (layer-1,row-1,pos)) + (value (layer-1,row-1,pos-1))
let layerValues layer =
[for row in [1..layer] ->
[for pos in [1..row] ->
value (layer,row,pos)]]
let rec rowToString = function
| [] -> ""
| hd
::tl -> sprintf "%d %s" hd
(rowToString tl
)
let rec layerToString = function
| [] -> ""
| hd
::tl -> sprintf "%s\n%s" (rowToString hd
) (layerToString tl
)
Console.ReadLine() |> Int32.Parse |> layerValues |> layerToString |> Console.WriteLine
b3BlbiBTeXN0ZW0KCmxldCByZWMgdmFsdWUgKGxheWVyLHJvdyxwb3MpID0KICAgIGlmIHBvcyA9IDAgfHwgcG9zID0gKHJvdyArIDEpIHx8IHJvdyA9IDAgfHwgcm93ID0gKGxheWVyICsgMSkgdGhlbiAwCiAgICBlbGlmIGxheWVyID0gMSB0aGVuIDEKICAgIGVsc2UgKHZhbHVlIChsYXllci0xLHJvdywgcG9zKSkgKyAodmFsdWUgKGxheWVyLTEscm93LTEscG9zKSkgKyAodmFsdWUgKGxheWVyLTEscm93LTEscG9zLTEpKQoKbGV0IGxheWVyVmFsdWVzIGxheWVyID0KICAgIFtmb3Igcm93IGluIFsxLi5sYXllcl0gLT4KICAgICAgICBbZm9yIHBvcyBpbiBbMS4ucm93XSAtPgogICAgICAgICAgICB2YWx1ZSAobGF5ZXIscm93LHBvcyldXQogICAgCmxldCByZWMgcm93VG9TdHJpbmcgPSBmdW5jdGlvbgogICAgfCBbXSAtPiAiIgogICAgfCBoZDo6dGwgLT4gc3ByaW50ZiAiJWQgJXMiIGhkIChyb3dUb1N0cmluZyB0bCkKCmxldCByZWMgbGF5ZXJUb1N0cmluZyA9IGZ1bmN0aW9uCiAgICB8IFtdIC0+ICIiCiAgICB8IGhkOjp0bCAtPiBzcHJpbnRmICIlc1xuJXMiIChyb3dUb1N0cmluZyBoZCkgKGxheWVyVG9TdHJpbmcgdGwpCgpDb25zb2xlLlJlYWRMaW5lKCkgfD4gSW50MzIuUGFyc2UgfD4gbGF5ZXJWYWx1ZXMgfD4gbGF5ZXJUb1N0cmluZyB8PiBDb25zb2xlLldyaXRlTGluZQ==