I have to go, so just a quick prototype, for one-way (only grow) - it just happens to give the result you want for the example, but I know if there was a 2-face separation on the ear loop, you would expect the separated part to disappear, and this doesn't do it:

[![][1]][1]

[![][2]][2]

And this goes the other way:

[![][3]][3]

[![][4]][4]

So if you do the first, then the 2nd, you're probably fine, but there's also a question of how many iterations (I did 100) - you need to implement a "while" loop. It can be done, I think I'll start another question for that and link here, but that tomorrow…

  [1]: https://i.sstatic.net/kkPWUJb8.png
  [2]: https://i.sstatic.net/km6ajOb8.png
  [3]: https://i.sstatic.net/IYseTV6W.png
  [4]: https://i.sstatic.net/JLwn932C.png