type Cons<A, B extends unknown[]> = [A, ...B];
type Car<A extends unknown[]> = A[0];
type Cdr<A extends unknown[]> = A extends [unknown, ...infer R] ? R : never;
type Concat<A extends unknown[], B extends unknown[]> = A extends []
? B
: Cons<Car<A>, Concat<Cdr<A>, B>>;

type Flat<A extends unknown[][]> = A extends [infer B, ...infer C]
? B extends unknown[]
? C extends unknown[][]
? Concat<B, Flat<C>>
: []
: []
: [];

type Encode<N extends number, R extends unknown[] = []> = R["length"] extends N
? R
: Encode<N, Cons<unknown, R>>;

type Decode<A extends unknown[]> = A["length"];

type ToArray<T extends string> = T extends ""
? []
: T extends `${infer A}${infer B}`
? [A, ...ToArray<B>]
: never;

type Include<SS extends unknown[], C extends unknown> = SS extends []
? false
: Car<SS> extends C
? true
: Include<Cdr<SS>, C>;

type MapChar<SS extends unknown[]> = SS extends []
? []
: Include<ToArray<"ABC">, Car<SS>> extends true
? [Encode<3>, ...MapChar<Cdr<SS>>]
: Include<ToArray<"DEF">, Car<SS>> extends true
? [Encode<4>, ...MapChar<Cdr<SS>>]
: Include<ToArray<"GHI">, Car<SS>> extends true
? [Encode<5>, ...MapChar<Cdr<SS>>]
: Include<ToArray<"JKL">, Car<SS>> extends true
? [Encode<6>, ...MapChar<Cdr<SS>>]
: Include<ToArray<"MNO">, Car<SS>> extends true
? [Encode<7>, ...MapChar<Cdr<SS>>]
: Include<ToArray<"PQRS">, Car<SS>> extends true
? [Encode<8>, ...MapChar<Cdr<SS>>]
: Include<ToArray<"TUV">, Car<SS>> extends true
? [Encode<9>, ...MapChar<Cdr<SS>>]
: Include<ToArray<"WXYZ">, Car<SS>> extends true
? [Encode<10>, ...MapChar<Cdr<SS>>]
: [];

type Solve<S extends string> = Decode<Flat<MapChar<ToArray<S>>>>;

type A0 = Solve<"WA">;
type A1 = Solve<"UNUCIC">;



\

풀긴했는데 타입체커가 못버티고 자살함




근데 막상 찍어보면 실행됨