Golff y Côd - Treiglad Read this yng Nghymraeg

Challenge

Given a word in Welsh, output all of the possible mutated forms of the word.

Mutations

A mutation is a change of the first letter of a word when following certain words or in certain grammatical contexts.

In Welsh, the following are considered "consonants":

b c ch d dd f ff g ng h l ll m n p ph r rh s t th


Note that multiple character consonants such as ch, ng and rh are counted as one letter in Welsh, and therefore one consonant.

The other letters in the Welsh alphabet are vowels, listed below:

a e i o u w y


See below, all of the mutations with the original letter on the left and the resulting mutated letters on the right:

Original | Mutations
---------+---------------
p        | b mh ph
t        | d nh th
c        | g ngh ch
b        | f m
d        | dd n
g        | [no letter] ng
m        | f
ll       | l
rh       | r


Here, [no letter] means that the g is removed from the start of the word.

Note that there are some consonants which do not mutate:

ch
dd
f
ff
j
l
n
ng
ph
r
s
th


Vowels may also be found at the start of words but do not mutate:

a
e
i
o
u
w
y


Examples

Input: dydd

Output:

dydd
ddydd
nydd




Input: pobl

Output:

pobl
bobl
mhobl
phobl




Input: gwernymynydd

Output:

gwernymynydd
wernymynydd
ngwernymynydd




Input: ffrindiau

Output:

ffrindiau




Input: enw

Output:

enw




Input: theatr

Output:

theatr




On the request of ArtOfCode ;)

Input: llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch

Output:

llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch
lanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch


Rules

The input will only ever be one word.

There will always be more letters after the leading consonant in your input.

Winning

The shortest code in bytes wins.
JavaScript (ES6), 180 bytes

x=&gt;x.replace(/^([cpt](?!h)|d(?!d)|[bgm]|ll|rh)(.+)/,(_,y,z)=&gt;({p:"b mh ph",t:"d nh th",c:"g ngh ch",b:"f m",d:"dd n",g:" ng",m:"f"}[y]||y[0]).split` `.map(b=&gt;a.push(b+z)),a=[x])&amp;&amp;a


Outputs as an array of strings. This is my first try, so it's almost certainly not optimal.

Try it out



f=x=&gt;x.replace(/^([cpt](?!h)|d(?!d)|[bgm]|ll|rh)(.+)/,(_,y,z)=&gt;({p:"b mh ph",t:"d nh th",c:"g ngh ch",b:"f m",d:"dd n",g:" ng",m:"f"}[y]||y[0]).split` `.map(b=&gt;a.push(b+z)),a=[x])&amp;&amp;a
&lt;input id=A value="pobl"&gt;&lt;button onclick="B.innerHTML=f(A.value).join('&lt;br&gt;')"&gt;Run&lt;/button&gt;&lt;br&gt;
&lt;pre id=B&gt;