import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.util.stream.*;
class GuitarTab {
public static enum NOTE {
A, ASHARP, B, C, CSHARP, D, DSHARP, E, F, FSHARP, G, GSHARP;
public NOTE add(int num) {
return NOTE.values()[(this.ordinal() + num) % NOTE.values().length];
}
}
private static final Pattern TAB_PATTERN = Pattern.compile("(.)\\|(.*)\\|");
private static final List<NOTE> NOTES = new ArrayList<>();
public static void main
(String[] args
) {
.sequential()
.forEach((line) -> {
Matcher m = TAB_PATTERN.matcher(line);
if (m.matches()) {
NOTE base = NOTE.valueOf(m.group(1));
if (NOTES.isEmpty()) {
IntStream.range(0, input.length()).forEach(i -> NOTES.add(null));
}
for (int i = 0; i < input.length(); i++) {
int fret
= Character.
getNumericValue(input.
charAt(i
)); int index = i;
if (Character.
isDigit(input.
charAt(i
+ 1))) { fret
= fret
* 10 + Character.
getNumericValue(input.
charAt(++i
)); }
NOTES.set(index, base.add(fret));
}
}
}
});
NOTES.stream()
.filter(note -> note != null)
.map(note -> note.toString().replaceAll("SHARP", "#"))
.
forEach(note
-> System.
out.
print(note
+ " ")); }
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnJlZ2V4Lio7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLio7CgpjbGFzcyBHdWl0YXJUYWIgewoKICAgIHB1YmxpYyBzdGF0aWMgZW51bSBOT1RFIHsKICAgICAgICBBLCBBU0hBUlAsIEIsIEMsIENTSEFSUCwgRCwgRFNIQVJQLCBFLCBGLCBGU0hBUlAsIEcsIEdTSEFSUDsKCiAgICAgICAgcHVibGljIE5PVEUgYWRkKGludCBudW0pIHsKICAgICAgICAgICAgcmV0dXJuIE5PVEUudmFsdWVzKClbKHRoaXMub3JkaW5hbCgpICsgbnVtKSAlIE5PVEUudmFsdWVzKCkubGVuZ3RoXTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBUQUJfUEFUVEVSTiA9IFBhdHRlcm4uY29tcGlsZSgiKC4pXFx8KC4qKVxcfCIpOwoKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8Tk9URT4gTk9URVMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgogICAgICAgIG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSkubGluZXMoKQogICAgICAgICAgICAgICAgLnNlcXVlbnRpYWwoKQogICAgICAgICAgICAgICAgLmZvckVhY2goKGxpbmUpIC0+IHsKICAgICAgICAgICAgICAgICAgICBNYXRjaGVyIG0gPSBUQUJfUEFUVEVSTi5tYXRjaGVyKGxpbmUpOwogICAgICAgICAgICAgICAgICAgIGlmIChtLm1hdGNoZXMoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBOT1RFIGJhc2UgPSBOT1RFLnZhbHVlT2YobS5ncm91cCgxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbnB1dCA9IG0uZ3JvdXAoMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOT1RFUy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFN0cmVhbS5yYW5nZSgwLCBpbnB1dC5sZW5ndGgoKSkuZm9yRWFjaChpIC0+IE5PVEVTLmFkZChudWxsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzRGlnaXQoaW5wdXQuY2hhckF0KGkpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcmV0ID0gQ2hhcmFjdGVyLmdldE51bWVyaWNWYWx1ZShpbnB1dC5jaGFyQXQoaSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5pc0RpZ2l0KGlucHV0LmNoYXJBdChpICsgMSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXQgPSBmcmV0ICogMTAgKyBDaGFyYWN0ZXIuZ2V0TnVtZXJpY1ZhbHVlKGlucHV0LmNoYXJBdCgrK2kpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URVMuc2V0KGluZGV4LCBiYXNlLmFkZChmcmV0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICBOT1RFUy5zdHJlYW0oKQogICAgICAgICAgICAgICAgLmZpbHRlcihub3RlIC0+IG5vdGUgIT0gbnVsbCkKICAgICAgICAgICAgICAgIC5tYXAobm90ZSAtPiBub3RlLnRvU3RyaW5nKCkucmVwbGFjZUFsbCgiU0hBUlAiLCAiIyIpKQogICAgICAgICAgICAgICAgLmZvckVhY2gobm90ZSAtPiBTeXN0ZW0ub3V0LnByaW50KG5vdGUgKyAiICIpKTsKICAgIH0KCn0=
RXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwKQnwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwKR3wtNy03LS0tNy0tLS0tLS0tLXwtNy03LS0tNy0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tNy0tLXwtLS0tLS0tLS0tLS0tLS0tLXwKRHwtLS0tLS0tLS05LS0tNy0tLXwtLS0tLS0tLS05LS0tNy0tLXwtNi02LS0tNi05LS0tLS0tLXwtNi02LS0tNi05LS0xMi0tLXwKQXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwKRXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXw=
E|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-----------------|
G|-7-7---7---------|-7-7---7---------|-------------7---|-----------------|
D|---------9---7---|---------9---7---|-6-6---6-9-------|-6-6---6-9--12---|
A|-----------------|-----------------|-----------------|-----------------|
E|-----------------|-----------------|-----------------|-----------------|