generators.ET0LTreeGrammar("simple solution"):
(
  { S, D, L },
  { shrink1:1, shrink2:1, darkRing:0, lightRing:0, .:2, c:1, bg:2, -:0 },
  {
    {
      S -> bg[D,L],
      D -> ( darkRing . shrink1[c[D]]),
      L -> ( lightRing . shrink2[c[L]])
    },
    {
      S -> bg[-,-],
      D -> darkRing,
      L -> lightRing
    }
  },
  S
)
