using System;
using System.Linq;
using System.Collections.Generic;
using System.Collections;
public class Test
{
public static void Main()
{
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, 12, 14, 13, 10, 11 };
Dictionary<int, int> layers = new Dictionary<int, int>();
int n = arr.Length,
nodesInRow = 1,
currentNodeInRow = -1,
rowCenter,
currentNodeLayer = 0,
maxLayer = -1;
for (int i = 0; i < n; i++)
{
if (currentNodeInRow == nodesInRow - 1)
{
nodesInRow *= 2;
currentNodeInRow = 0;
} else currentNodeInRow++;
if (i == 0) {
layers.Add(0, 0); // Special case
continue;
}
rowCenter = nodesInRow / 2 - 1;
if (currentNodeInRow <= rowCenter)
currentNodeLayer = currentNodeInRow;
else
currentNodeLayer = nodesInRow - currentNodeInRow - 1;
if (currentNodeLayer > maxLayer) maxLayer = currentNodeLayer;
layers.Add(i, currentNodeLayer);
// Console.WriteLine("{0} => {1}", i, currentNodeLayer);
}
for (int i = 0; i <= maxLayer; i++)
{
Console.Write("Layer {0}:", i + 1);
foreach (var x in layers.Where((p) => p.Value == i))
if (arr[x.Key] != -1) Console.Write("{0} ", arr[x.Key]);
Console.WriteLine();
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlpbnRbXSBhcnIgPSBuZXcgaW50W10geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAtMSwgMTIsIDE0LCAxMywgMTAsIDExIH07CgkJCgkJRGljdGlvbmFyeTxpbnQsIGludD4gbGF5ZXJzID0gbmV3IERpY3Rpb25hcnk8aW50LCBpbnQ+KCk7CgkJCgkJaW50IG4gPSBhcnIuTGVuZ3RoLAoJCQlub2Rlc0luUm93ID0gMSwgCgkJIAljdXJyZW50Tm9kZUluUm93ID0gLTEsCgkJIAlyb3dDZW50ZXIsCgkJIAljdXJyZW50Tm9kZUxheWVyID0gMCwKCQkgCW1heExheWVyID0gLTE7CgkJIAkKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKCQl7CgkJCWlmIChjdXJyZW50Tm9kZUluUm93ID09IG5vZGVzSW5Sb3cgLSAxKQoJCQl7CgkJCQlub2Rlc0luUm93ICo9IDI7CgkJCQljdXJyZW50Tm9kZUluUm93ID0gMDsKCQkJfSBlbHNlIGN1cnJlbnROb2RlSW5Sb3crKzsKCQkJCgkJCWlmIChpID09IDApIHsKCQkJCWxheWVycy5BZGQoMCwgMCk7IC8vIFNwZWNpYWwgY2FzZQoJCQkJY29udGludWU7CgkJCX0KCQkJCgkJCXJvd0NlbnRlciA9IG5vZGVzSW5Sb3cgLyAyIC0gMTsKCQkJCgkJCWlmIChjdXJyZW50Tm9kZUluUm93IDw9IHJvd0NlbnRlcikKCQkJICAgIGN1cnJlbnROb2RlTGF5ZXIgPSBjdXJyZW50Tm9kZUluUm93OwoJCQllbHNlCgkJCQljdXJyZW50Tm9kZUxheWVyID0gbm9kZXNJblJvdyAtIGN1cnJlbnROb2RlSW5Sb3cgLSAxOwoJCQkJCgkJCWlmIChjdXJyZW50Tm9kZUxheWVyID4gbWF4TGF5ZXIpIG1heExheWVyID0gY3VycmVudE5vZGVMYXllcjsKCQkJbGF5ZXJzLkFkZChpLCBjdXJyZW50Tm9kZUxheWVyKTsKCQkJCgkJCS8vIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH0gPT4gezF9IiwgaSwgY3VycmVudE5vZGVMYXllcik7CgkJfQoJCQoJCQoJCWZvciAoaW50IGkgPSAwOyBpIDw9IG1heExheWVyOyBpKyspCgkJewoJCQlDb25zb2xlLldyaXRlKCJMYXllciB7MH06IiwgaSArIDEpOwoJCQlmb3JlYWNoICh2YXIgeCBpbiBsYXllcnMuV2hlcmUoKHApID0+IHAuVmFsdWUgPT0gaSkpCgkJCQlpZiAoYXJyW3guS2V5XSAhPSAtMSkgQ29uc29sZS5Xcml0ZSgiezB9ICIsIGFyclt4LktleV0pOwoJCQlDb25zb2xlLldyaXRlTGluZSgpOwoJCX0KCX0KfQ==