题目描述
C/B# C#/Db D D#/Eb E/Fb F/E# F#/Gb G G#/Ab A A#/Bb B/Cb C/B# …
上表中任意两个相邻音符构成一个半音。恰被一个音符隔开的两个音符构成一个全音。一个大调音阶由八个音符组成。它由上述之一的音符开始并且紧跟着连续的“全音-全音-半音-全音-全音-全音-半音”。分别由C和Db开始的两个大调音阶,将由下面的音符组成:
C D E F G A B C
Db Eb F Gb Ab Bb C Db
下面的规则同样适用于大调音阶:
1. A到G的每个字母将在音阶中出现恰好一次,同时第一个字母将例外地在音阶最后重复出现一次。
2. 音阶当中不允许同时出现升调或降调记号。
大调音阶的首个音符被认为是这个音阶的曲调。比方说,上面的两个音阶分别是C和Db大调音阶。更换两个音阶的音符就是交换对应位置的音符那么简单。举个例子,C大调音阶中的F会和Db大调音阶中的Gb交换因为它们在各自音阶中的位置相同。
你需要写一个程序,在不同音阶中交换音符。
输入格式
输入的最后一行只包含一个星号,并不作为测试数据。
数据组数不超过100组并且保证输入音符合法。
输出格式
对于包含了有效的源调和目标调的数据,在第一行的输出后,每个被交换的音符都对应一行输出。假如输入的音符在源调的大调音阶中是个有效音符,那么输出“M transposes to N”,M表示源调中的音符,N是目标调中对应位置的音符。假如输入的音符在源大调音阶中无效,那么输出“M is not a valid note in the X major scale”,M代表输入音符,X代表源音调。不管是有效还是无效音符,都要保持一致的缩进格式。
各组数据的输出之间应该用一个空行隔开。你的输出格式应该要和下面的标准输出相同。
输入和输出的标准格式请参考未格式化的试题。
样例输入
C Db F * Db C Gb * C B# A B * C D A A# B Bb C * A# Bb C * *
样例输出
Transposing from C to Db: F transposes to Gb Transposing from Db to C: Gb transposes to F Key of B# is not a valid major key Transposing from C to D: A transposes to B A# is not a valid note in the C major scale B transposes to C# Bb is not a valid note in the C major scale C transposes to D Key of A# is not a valid major key