remove1(Items, Structures1, Structures2) :- remove2(Items, [], Structures1, Structures2). remove2([], _Structures, Structures, Structures). remove2(Items1, Structures1, Structures2, Structures3) :- Items1 = [Item | Items2], remove3(Item, Structures1, Structures2, Structures4), remove2(Items2, [], Structures4, Structures3). remove3(_Item, Structures, [], Structures). remove3(Item2, Structures1, Structures2, Structures3) :- Structures2 = [Structure | Structures4], Structure = [Item1, Item2], change(Item1, Item2, [], Structures4, Structures5), remove3(Item1, Structures1, Structures5, Structures3), !. remove3(Item, Structures1, Structures2, Structures3) :- Structures2 = [Structure | Structures4], append(Structures1, [Structure], Structures5), remove3(Item, Structures5, Structures4, Structures3). change(_Item1, _Item2, Structures, [], Structures). change(Item1, Item2, Structures1, Structures2, Structures3) :- Structures2 = [Structure1 | Structures4], Structure1 = [Item2, Item3], Structure2 = [Item1, Item3], append(Structures1, [Structure2], Structures5), change(Item1, Item2, Structures5, Structures4, Structures3). change(Item1, Item2, Structures1, Structures2, Structures3) :- Structures2 = [Structure | Structures4], not(Structure = [Item2, _]), append(Structures1, [Structure], Structures5), change(Item1, Item2, Structures5, Structures4, Structures3).