#[Japt](https://github.com/ETHproductions/japt), <s>61</s> <s>59</s> <s>92</s> <s>85</s> <s>84</s> 83 bytes > I'm offline for most of the (long) weekend, if any more issues are discovered with this, please ask a mod to delete it for me until such a time as I can fix it. Takes input as a string for both operations and returns a string for both as well or `1` for invalid input. Assumes, as implied by the test cases, that inputs will always contain multiple characters; add 2 bytes if that's not true. --- V="OIREASGTBP"UÉ?¡VgXÃe"%v"²_i1'NÃe"%V"²_i1'UÃ:Uè"%v%v|%V%V|[^{V}NU]" ªUr"N|U" £VaX **Try it:** [Numbers -> Letters](http://ethproductions.github.io/japt/?v=1.4.5&code=Vj0iT0lSRUFTR1RCUCJVyT+hVmdYw2UiJXYisl9pMSdOw2UiJVYisl9pMSdVwzpV6CIldiV2fCVWJVZ8W157Vn1OVV0iIKpVciJOfFUiIKNWYVg=&input=IjMxNDE1OTIiCg==) or [Letters -> Numbers](http://ethproductions.github.io/japt/?v=1.4.5&code=Vj0iT0lSRUFTR1RCUCJVyT+hVmdYw2UiJXYisl9pMSdOw2UiJVYisl9pMSdVwzpV6CIldiV2fCVWJVZ8W157Vn1OVV0iIKpVciJOfFUiIKNWYVg=&input=IkVOSU5BTklTVVBVUiIK) --- - <s>2</s> 4 bytes saved thank to [obarakon](https://codegolf.stackexchange.com/users/61613/obarakon), who also convinced me to take this up again after I abandoned it earlier. I wish he hadn't! - <s>33</s> <s>26</s> 25(!) bytes sacrificed implementing a quick fix (i.e., yet to be fully golfed) to check input validity. --- ##Explanation (Yet to be updated to the latest version) :Implicit input of string U. V="..." :Assign the string of letters to variable V, in order. UÉ :Subtract 1 from U, which will give a number (truthy) if the input is a number or NaN (falsey) if the input is a string. ? :If it's a number then ¡ : Map over the input string, replacing each character (digit) with ... VgX : the character in string V at index X, the current digit. Ã : End mapping. e : Recursively replace ... "%v"² : every occurrence of 2 vowels (RegEx) ... _i1'N : with the current match with an "N" inserted at index 1. Ã : End replacement. e : Another recursive replacement of ... "%V"² : every occurrence of 2 non-vowel characters (i.e., consonants) ... _i1'U : with the current match with a "U" inserted at index 1. Ã : End replacement. : :Else, if it's a string then Uè"%v%v|%V%V|[^{V}NU]" : Count the number of matches of 2 successive vowels OR 2 successive non-vowels OR any character not in contained in string V plus N & U. : (The longest part of this code is the fecking input validation!) ? : If that count is greater than 0 then T : Return 0. : Else Ur"N|U" : Replace every occurrence of "N" OR "U" in string U with nothing. £ : Map over the string, replacing each character (letter) with ... VaX : the index of the current character X in string V. :Implicit output of resulting string.