Технически Bitcoin адрес представляет собой 160-битный хэш от открытого ключа, т.е представленный в HEX-формате, он занимает 20 байтов.
Для пользователя криптовалюты Биткойн адрес биткойн-кошелька представляет собой строку из 33 алфавитно-цифровых символов. Длина такой строки иногда может быть и меньше, но это к делу не относится.
Для того, чтобы набирать адрес кошелька с клавиатуры, адреса представляют в формате Base58. Адрес может содержать все буквенно-цифровые символы латинского алфавита, кроме 0, O, I (i большое), and l (L маленькое) – символов, которые внешне похожи друг на друга.
Пусть алфавит формата Base58 будет: «123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ»
А алфавит HEX-формата: «0123456789abcdef»
Вам даны несколько адресов, представленных в HEX- и Base58 форматах.
Требуется определить, содержатся ли среди них одинаковые адреса.
Каждую группу номеров (содержащую более одного элемента) одинаковых адресов необходимо вывести в отдельную строку, разделив пробелом и упорядочив их по возрастанию, как внутри строки, так и по возрастанию первых элементов строк.
Если кто-то не знаком с кодировкой Base58, приводим код функции для перевода целого числа в кодировку Base58, написанный на Python:
Формат входных данных
В первой строке – число N – количество адресов. N < 10.
Далее идут N строк, каждая из которых содержит номер адреса (целое число) и, через пробел, строку адреса либо в виде десятичного числа, либо в HEX-формате, либо в формате Base58. Длина строки адреса – не больше 50 символов
Формат выходных данных
В первой строке – натуральное число N, количество найденных групп. Если все адреса различны – в первую строку поместить число 0.
В каждой из следующих N строк – номера одинаковых адресов, разделенные пробелом. Внутри строки номера упорядочены по возрастанию. Сами строки упорядочены по возрастанию первых элементов строк.
Примеры
стандартный ввод | стандартный вывод |
---|
9
1 2
2 22
3 222
4 2222
5 6f
6 2V
7 22222
8 2b67
9 4iz
| 2
5 6
8 9
|
6
1 1234567890
2 499602d2
3 10325476989
4 2T6u2h
5 gJqLzk
6 26772476e
| 2
1 2 4
3 5
|
2
1 499582d2
2 1234567809
| 0
|
3
1 1569275433846670190958947355801916604025588861116008628224
2 3ffffffffffffffffffffff0000000000000000000000000
3 6Qpfh5jFi7HGRMwewhHzFYwq2c1UAXzcE
| 1
2 3
|