First, "there is no occurrence of 123".

So the chain can start with any number of 2 and 3.

Then it has 0, 1 or more components that start with 1, and followed by any number of 2 and 3 other than 23. So the 1 is followed by nothing, a single 2, 22 and a number any of 2 and 3, or 3 and any number of 2 and 3.

Each of these components can contain three or four consecutive 2s. Four consecutive 2's are not allowed, three consecutive 2's can only occur once. So, for each of these components, add elements to not allow three 2s in a row or to allow three but not four 2s in a row. And then the language is any number of components without three 2s, possibly followed by one component with three 2s and any number of components without three 2s.

It's a little complicated, but not too bad.

So make regular expressions for "lead_2" = "any number of 2 and 3, but not three 2 in a row", "lead_3" = "any number of 2 and 3 , with 222 once but not twice, and not 2222 "," follow_2 "=" 1, followed by lead_2 not starting with 23 "," follow_3 "=" 1, followed by lead_3 not starting with 23 ", and the whole language is

```
lead_2 (follow_2)* or
lead_2 (follow_2)* follow_3 (follow_2)* or
lead_3 (follow_2)*
```