function GET_NEXT_LEVEL(PREV_LEVEL:string[]) {

  return JSON.stringify((function (R, P:string[]) {

    let O  = new Array<string>();

    P.forEach(A => { R.get(A.at(-1))?.forEach(B => { O.push(`${A}${B}`)})});

    return O ?? [''];

  })((

    new Map<PER1, PER1[]>([

      [ "P", [ "P","F","M""G","B","Z""C","S","D""E" ] ],

      [ "F", [ "P","F","M""G","B","Z""C","S","D""W" ] ],

      [ "M", [ "P","F","M""G","B","Z""C","S","D""H" ] ],

      [ "G", [                             "C","S","D""E" ] ],  

      [ "B", [                             "C","S","D""W" ] ],  

      [ "Z", [                             "C","S","D""H" ] ],

      [ "C", [                             "C","S","D""E" ] ],  

      [ "S", [                             "C","S","D""W" ] ],  

      [ "D", [                             "C","S","D""H" ] ],

      [ "E", [ "P","F","M""G","B","Z""C","S","D""E" ] ],  

      [ "H", [ "P","F","M""G","B","Z""C","S","D""W" ] ],  

      [ "W", [ "P","F","M""G","B","Z""C","S","D""H" ] ]

    ])

  ),PREV_LEVEL));  

}

type PER1 = "P" | "F" | "M" | "G" | "B" | "Z" | "C" | "S" | "D" | "E" | "H" | "W";

const REZ1:PER1[] = [ "P", "F", "M", "G", "B", "Z", "C", "S", "D", "E", "H", "W" ];

const REZ2 = GET_NEXT_LEVEL(REZ1);

console.log(REZ2); // ["PP","PF","PM","PG","PB","PZ","PC","PS","PD","PE","FP","FF","FM","FG","FB","FZ","FC","FS","FD","FW","MP","MF","MM","MG","MB","MZ","MC","MS","MD","MH","GC","GS","GD","GE","BC","BS","BD","BW","ZC","ZS","ZD","ZH","CC","CS","CD","CE","SC","SS","SD","SW","DC","DS","DD","DH","EP","EF","EM","EG","EB","EZ","EC","ES","ED","EE","HP","HF","HM","HG","HB","HZ","HC","HS","HD","HW","WP","WF","WM","WG","WB","WZ","WC","WS","WD","WH"]