<?php
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 тысячи, 5 миллионов */
function inclineWord( $numbers , $isFemale , $key ) {
$spelling = [
0 => [ 0 => 'рубль' , 1 => 'рубля' , 2 => 'рублей' ] ,
1 => [ 0 => 'тысяча' , 1 => 'тысячи' , 2 => 'тысяч' ] ,
2 => [ 0 => 'миллион' , 1 => 'миллиона' , 2 => 'миллионов' ] ,
] ;
if ( arrayCheck( $numbers ) ) {
}
if ( $numbers [ 0 ] == 1 ) {
$word = $spelling [ $key ] [ 0 ] ;
} elseif ( $numbers [ 0 ] >= 2 && $numbers [ 0 ] <= 4 ) {
$word = $spelling [ $key ] [ 1 ] ;
} elseif ( $numbers [ 0 ] >= 5 && $numbers [ 0 ] <= 9 || $numbers [ 0 ] >= 11 && $numbers [ 0 ] <= 19 || $numbers [ 0 ] == 0 ) {
$word = $spelling [ $key ] [ 2 ] ;
}
return $word ;
}
/* Соединяет особенные числа */
function combineNumbers( $numbers ) {
$keys = ( count ( $numbers ) == 4 ) ?
[ 1 , 2 ] : ( ( count ( $numbers ) == 3 ) ?
[ 0 , 1 ] : null ) ;
if ( $keys ) {
if ( ( $numbers [ $keys [ 0 ] ] == 1 ) && ( $numbers [ $keys [ 1 ] ] >= 1 ) && ( $numbers [ $keys [ 1 ] ] <= 9 ) ) {
$numbers [ $keys [ 0 ] ] *= 10 + $numbers [ $keys [ 1 ] ] ;
unset ( $numbers [ $keys [ 1 ] ] ) ; }
}
return $numbers ;
}
/*
Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
если мы считаем число для мужского рода (один рубль),
и 1 — для женского (одна тысяча)
*/
function smallNumberToText( $numbers , $isFemale , $length ) {
$spelling = [
0 => 'ноль' , 10 => 'десять' , 100 => 'сто' ,
1 => 'один' , 11 => 'одиннадцать' , 20 => 'двадцать' , 200 => 'двести' ,
2 => 'два' , 12 => 'двенадцать' , 30 => 'тридцать' , 300 => 'триста' ,
3 => 'три' , 13 => 'тринадцать' , 40 => 'сорок' , 400 => 'четыреста' ,
4 => 'четыре' , 14 => 'четырнадцать' , 50 => 'пятьдесят' , 500 => 'пятьсот' ,
5 => 'пять' , 15 => 'пятнадцать' , 60 => 'шестьдесят' , 600 => 'шестьсот' ,
6 => 'шесть' , 16 => 'шестнадцать' , 70 => 'семьдесят' , 700 => 'семьсот' ,
7 => 'семь' , 17 => 'семнадцать' , 80 => 'восемьдесят' , 800 => 'восемьсот' ,
8 => 'восемь' , 18 => 'восемнадцать' , 90 => 'девяносто' , 900 => 'девятьсот' ,
9 => 'девять' , 19 => 'девятнадцать'
] ;
if ( $isFemale ) {
$femaleSpelling = [
1 => 'одна' ,
2 => 'две'
] ;
$spelling = array_replace( $spelling , $femaleSpelling ) ;
}
if ( arrayCheck( $numbers ) ) {
}
unset ( $numbers [ 'remainder' ] ) ;
$multiplierAndKey = ( count ( $numbers ) == 3 ) ?
[ 100 , 3 ] : ( ( count ( $numbers ) == 2 ) ?
( ( $length == 4 ) ?
[ 100 , 2 ] : [ 10 , 2 ] ) : [ 1 , 1 ] ) ;
for ( $i = 0 ; $i < $multiplierAndKey [ 1 ] ; $i ++ ) {
if ( $numbers [ $i ] != 0 ) {
$words [ ] = $spelling [ $numbers [ $i ] * $multiplierAndKey [ 0 ] ] ;
} else {
$words [ ] = null ;
}
$multiplierAndKey [ 0 ] = ( $length == 4 && count ( $numbers ) == 2 ) ?
1 : $multiplierAndKey [ 0 ] / 10 ; }
return $words ;
}
/* Разделяет число на массивы с числами */
function divideNumber( $number , $minIteration , $maxIteration ) {
for ( $i = $minIteration ; $i < $maxIteration ; $i ++ ) {
if ( $number ) {
$numbers [ ] = $number % 10 ;
$number = floor ( $number / 10 ) ; $numbers [ 'remainder' ] = $number ;
} elseif ( $number == 0 ) {
$numbers [ ] = null ;
}
}
return $numbers ;
}
/* Проверяет массив на наличие реальных значений */
function arrayCheck( $array ) {
$result = 0 ;
foreach ( $array as $variable ) {
if ( $variable != null ) {
$result = 1 ;
}
}
return $result ;
}
function numberToText( $number ) {
/*
$key - номер ключа массива
$min - мин. кол-во интераций
$max - макс. кол-во итераций
*/
for ( $key = 0 , $min = 0 , $max = 3 ; $max <= 9 ; $key ++, $min += 3 , $max += 3 ) {
if ( ! empty ( $numbers [ $key - 1 ] [ 'remainder' ] ) || $key == 0 ) {
$numbers [ $key ] = divideNumber( $number , $min , $max ) ;
} else {
$numbers [ $key ] = divideNumber( $numbers [ $key - 1 ] [ 'remainder' ] , $min , $max ) ;
}
$isFemale = 0 ;
if ( $numbers [ $key ] [ 0 ] == 1 && $key == 1 || $numbers [ $key ] [ 0 ] == 2 && $key == 1 ) {
$isFemale = 1 ;
}
$inclinedWords [ $key ] = inclineWord( $numbers [ $key ] , $isFemale , $key ) ;
$words [ $key ] = smallNumberToText
( $numbers [ $key ] , $isFemale , count ( $numbers [ $key ] ) ) ;
if ( $key == 0 ) {
if ( arrayCheck( $words [ $key ] ) ) {
$text = implode ( ' ' , $words [ $key ] ) ; }
$text = $text . ' ' . "($number )" . ' ' . $inclinedWords [ $key ] ;
} else {
$text = "($number )" . ' ' . $inclinedWords [ $key ] ;
}
} else {
if ( arrayCheck( $words [ $key ] ) ) {
$text = implode ( ' ' , $words [ $key ] ) . ' ' . $inclinedWords [ $key ] . ' ' . $text ; }
}
}
}
return $text ;
}
/* Вызовем функцию несколько раз */
for ( $i = 0 ; $i < 5 ; $i ++ ) {
$amount [ $i ] = mt_rand ( 0 , 999999999 ) ; $text [ $i ] = numberToText( $amount [ $i ] ) ;
echo "На вашем счету: {$text [$i ]}\n " ;
}
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7CgovKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidGD0Y4g0YfQuNGB0LvRgyDRhNC+0YDQvNGDINGB0LvQvtCy0LA6IDEg0YDRg9Cx0LvRjCwgMiDRgtGL0YHRj9GH0LgsIDUg0LzQuNC70LvQuNC+0L3QvtCyICovCmZ1bmN0aW9uIGluY2xpbmVXb3JkKCRudW1iZXJzLCAkaXNGZW1hbGUsICRrZXkpIHsKCiAgICAkc3BlbGxpbmcgPSBbCiAgICAgICAgMCA9PiBbMCA9PiAn0YDRg9Cx0LvRjCcsIDEgPT4gJ9GA0YPQsdC70Y8nLCAyID0+ICfRgNGD0LHQu9C10LknXSwKICAgICAgICAxID0+IFswID0+ICfRgtGL0YHRj9GH0LAnLCAxID0+ICfRgtGL0YHRj9GH0LgnLCAyID0+ICfRgtGL0YHRj9GHJ10sCiAgICAgICAgMiA9PiBbMCA9PiAn0LzQuNC70LvQuNC+0L0nLCAxID0+ICfQvNC40LvQu9C40L7QvdCwJywgMiA9PiAn0LzQuNC70LvQuNC+0L3QvtCyJ10sCiAgICBdOwoKICAgIGlmIChhcnJheUNoZWNrKCRudW1iZXJzKSkgewogICAgICAgICRudW1iZXJzID0gYXJyYXlfcmV2ZXJzZShjb21iaW5lTnVtYmVycyhhcnJheV9yZXZlcnNlKCRudW1iZXJzKSkpOwogICAgfQogICAgCiAgICBpZiAoJG51bWJlcnNbMF0gPT0gMSkgewogICAgICAgICR3b3JkID0gJHNwZWxsaW5nWyRrZXldWzBdOwogICAgfSBlbHNlaWYgKCRudW1iZXJzWzBdID49IDIgJiYgJG51bWJlcnNbMF0gPD0gNCkgewogICAgICAgICR3b3JkID0gJHNwZWxsaW5nWyRrZXldWzFdOwogICAgfSBlbHNlaWYgKCRudW1iZXJzWzBdID49IDUgJiYgJG51bWJlcnNbMF0gPD0gOSB8fCAkbnVtYmVyc1swXSA+PSAxMSAmJiAkbnVtYmVyc1swXSA8PSAxOSB8fCAkbnVtYmVyc1swXSA9PSAwKSB7CiAgICAgICAgJHdvcmQgPSAkc3BlbGxpbmdbJGtleV1bMl07CiAgICB9CgogICAgcmV0dXJuICR3b3JkOwp9CgovKiDQodC+0LXQtNC40L3Rj9C10YIg0L7RgdC+0LHQtdC90L3Ri9C1INGH0LjRgdC70LAgKi8KZnVuY3Rpb24gY29tYmluZU51bWJlcnMoJG51bWJlcnMpIHsKICAgICRrZXlzID0gKGNvdW50KCRudW1iZXJzKSA9PSA0KSA/IFsxLCAyXSA6ICgoY291bnQoJG51bWJlcnMpID09IDMpID8gWzAsIDFdIDogbnVsbCk7CgogICAgaWYgKCRrZXlzKSB7CiAgICAgICAgaWYgKCgkbnVtYmVyc1ska2V5c1swXV0gPT0gMSkgJiYgKCRudW1iZXJzWyRrZXlzWzFdXSA+PSAxKSAmJiAoJG51bWJlcnNbJGtleXNbMV1dIDw9IDkpKSB7CiAgICAgICAgICAgICRudW1iZXJzWyRrZXlzWzBdXSAqPSAxMCArICRudW1iZXJzWyRrZXlzWzFdXTsKICAgICAgICAgICAgdW5zZXQoJG51bWJlcnNbJGtleXNbMV1dKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRudW1iZXJzOwp9CiAKLyogCiAgICDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINGH0LjRgdC70LAg0L7RgiAwINC00L4gOTk5INCyINGC0LXQutGB0YIuINCf0LDRgNCw0LzQtdGC0YAgJGlzRmVtYWxlINGA0LDQstC10L0g0L3Rg9C70Y4sIAogICAg0LXRgdC70Lgg0LzRiyDRgdGH0LjRgtCw0LXQvCDRh9C40YHQu9C+INC00LvRjyDQvNGD0LbRgdC60L7Qs9C+INGA0L7QtNCwICjQvtC00LjQvSDRgNGD0LHQu9GMKSwgCiAgICDQuCAxIOKAlCDQtNC70Y8g0LbQtdC90YHQutC+0LPQviAo0L7QtNC90LAg0YLRi9GB0Y/Rh9CwKSAKKi8KZnVuY3Rpb24gc21hbGxOdW1iZXJUb1RleHQoJG51bWJlcnMsICRpc0ZlbWFsZSAsJGxlbmd0aCkgewogCiAgICAkc3BlbGxpbmcgPSBbCiAgICAgICAgMCAgID0+ICAn0L3QvtC70YwnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCAgPT4gICfQtNC10YHRj9GC0YwnLCAgICAgICAgMTAwID0+ICAn0YHRgtC+JywKICAgICAgICAxICAgPT4gICfQvtC00LjQvScsICAgICAgICAgMTEgID0+ICAn0L7QtNC40L3QvdCw0LTRhtCw0YLRjCcsICAgICAgMjAgID0+ICAn0LTQstCw0LTRhtCw0YLRjCcsICAgICAgMjAwID0+ICAn0LTQstC10YHRgtC4JywKICAgICAgICAyICAgPT4gICfQtNCy0LAnLCAgICAgICAgICAxMiAgPT4gICfQtNCy0LXQvdCw0LTRhtCw0YLRjCcsICAgICAgIDMwICA9PiAgJ9GC0YDQuNC00YbQsNGC0YwnLCAgICAgIDMwMCA9PiAgJ9GC0YDQuNGB0YLQsCcsCiAgICAgICAgMyAgID0+ICAn0YLRgNC4JywgICAgICAgICAgMTMgID0+ICAn0YLRgNC40L3QsNC00YbQsNGC0YwnLCAgICAgICA0MCAgPT4gICfRgdC+0YDQvtC6JywgICAgICAgICA0MDAgPT4gICfRh9C10YLRi9GA0LXRgdGC0LAnLAogICAgICAgIDQgICA9PiAgJ9GH0LXRgtGL0YDQtScsICAgICAgIDE0ICA9PiAgJ9GH0LXRgtGL0YDQvdCw0LTRhtCw0YLRjCcsICAgICA1MCAgPT4gICfQv9GP0YLRjNC00LXRgdGP0YInLCAgICAgNTAwID0+ICAn0L/Rj9GC0YzRgdC+0YInLAogICAgICAgIDUgICA9PiAgJ9C/0Y/RgtGMJywgICAgICAgICAxNSAgPT4gICfQv9GP0YLQvdCw0LTRhtCw0YLRjCcsICAgICAgIDYwICA9PiAgJ9GI0LXRgdGC0YzQtNC10YHRj9GCJywgICAgNjAwID0+ICAn0YjQtdGB0YLRjNGB0L7RgicsCiAgICAgICAgNiAgID0+ICAn0YjQtdGB0YLRjCcsICAgICAgICAxNiAgPT4gICfRiNC10YHRgtC90LDQtNGG0LDRgtGMJywgICAgICA3MCAgPT4gICfRgdC10LzRjNC00LXRgdGP0YInLCAgICAgNzAwID0+ICAn0YHQtdC80YzRgdC+0YInLCAgICAKICAgICAgICA3ICAgPT4gICfRgdC10LzRjCcsICAgICAgICAgMTcgID0+ICAn0YHQtdC80L3QsNC00YbQsNGC0YwnLCAgICAgICA4MCAgPT4gICfQstC+0YHQtdC80YzQtNC10YHRj9GCJywgICA4MDAgPT4gICfQstC+0YHQtdC80YzRgdC+0YInLAogICAgICAgIDggICA9PiAgJ9Cy0L7RgdC10LzRjCcsICAgICAgIDE4ICA9PiAgJ9Cy0L7RgdC10LzQvdCw0LTRhtCw0YLRjCcsICAgICA5MCAgPT4gICfQtNC10LLRj9C90L7RgdGC0L4nLCAgICAgOTAwID0+ICAn0LTQtdCy0Y/RgtGM0YHQvtGCJywKICAgICAgICA5ICAgPT4gICfQtNC10LLRj9GC0YwnLCAgICAgICAxOSAgPT4gICfQtNC10LLRj9GC0L3QsNC00YbQsNGC0YwnICAgIAogICAgXTsKCiAgICBpZiAoJGlzRmVtYWxlKSB7CiAgICAgICAgJGZlbWFsZVNwZWxsaW5nID0gWwogICAgICAgICAgICAxID0+ICfQvtC00L3QsCcsCiAgICAgICAgICAgIDIgPT4gJ9C00LLQtScKICAgICAgICBdOwoKICAgICAgICAkc3BlbGxpbmcgPSBhcnJheV9yZXBsYWNlKCRzcGVsbGluZywgJGZlbWFsZVNwZWxsaW5nKTsKICAgIH0KICAgIAogICAgaWYgKGFycmF5Q2hlY2soJG51bWJlcnMpKSB7CiAgICAgICAgJG51bWJlcnMgPSBjb21iaW5lTnVtYmVycyhhcnJheV9yZXZlcnNlKCRudW1iZXJzKSk7CiAgICB9CiAgICB1bnNldCgkbnVtYmVyc1sncmVtYWluZGVyJ10pOwoKICAgICRtdWx0aXBsaWVyQW5kS2V5ID0gKGNvdW50KCRudW1iZXJzKSA9PSAzKSA/IFsxMDAsIDNdIDogKChjb3VudCgkbnVtYmVycykgPT0gMikgPyAoKCRsZW5ndGggPT0gNCkgPyBbMTAwLCAyXSA6IFsxMCwgMl0pIDogWzEsIDFdKTsKCiAgICBmb3IgKCRpID0gMDsgJGkgPCAkbXVsdGlwbGllckFuZEtleVsxXTsgJGkrKykgewogICAgICAgIGlmICgkbnVtYmVyc1skaV0gIT0gMCkgewogICAgICAgICAgICAkd29yZHNbXSA9ICRzcGVsbGluZ1skbnVtYmVyc1skaV0gKiAkbXVsdGlwbGllckFuZEtleVswXV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHdvcmRzW10gPSBudWxsOwogICAgICAgIH0KICAgICAgICAkbXVsdGlwbGllckFuZEtleVswXSA9ICgkbGVuZ3RoID09IDQgJiYgY291bnQoJG51bWJlcnMpID09IDIpID8gMSA6ICRtdWx0aXBsaWVyQW5kS2V5WzBdIC8gMTA7CiAgICB9CgogICAgcmV0dXJuICR3b3JkczsKfQoKLyog0KDQsNC30LTQtdC70Y/QtdGCINGH0LjRgdC70L4g0L3QsCDQvNCw0YHRgdC40LLRiyDRgSDRh9C40YHQu9Cw0LzQuCAqLwpmdW5jdGlvbiBkaXZpZGVOdW1iZXIoJG51bWJlciwgJG1pbkl0ZXJhdGlvbiwgJG1heEl0ZXJhdGlvbikgewogICAgZm9yICgkaSA9ICRtaW5JdGVyYXRpb247ICRpIDwgJG1heEl0ZXJhdGlvbjsgJGkrKykgewogICAgICAgIGlmICgkbnVtYmVyKSB7CiAgICAgICAgICAgICRudW1iZXJzW10gPSAkbnVtYmVyICUgMTA7CiAgICAgICAgICAgICRudW1iZXIgPSBmbG9vcigkbnVtYmVyIC8gMTApOwogICAgICAgICAgICAkbnVtYmVyc1sncmVtYWluZGVyJ10gPSAkbnVtYmVyOwogICAgICAgIH0gZWxzZWlmICgkbnVtYmVyID09IDApIHsKICAgICAgICAgICAgJG51bWJlcnNbXSA9IG51bGw7CiAgICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gJG51bWJlcnM7Cn0KCi8qINCf0YDQvtCy0LXRgNGP0LXRgiDQvNCw0YHRgdC40LIg0L3QsCDQvdCw0LvQuNGH0LjQtSDRgNC10LDQu9GM0L3Ri9GFINC30L3QsNGH0LXQvdC40LkgKi8KZnVuY3Rpb24gYXJyYXlDaGVjaygkYXJyYXkpIHsKICAgICRyZXN1bHQgPSAwOwogICAgZm9yZWFjaCAoJGFycmF5IGFzICR2YXJpYWJsZSkgewogICAgICAgIGlmICgkdmFyaWFibGUgIT0gbnVsbCkgewogICAgICAgICAgICAkcmVzdWx0ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCmZ1bmN0aW9uIG51bWJlclRvVGV4dCgkbnVtYmVyKSB7CgogICAgLyoKICAgICRrZXkgLSDQvdC+0LzQtdGAINC60LvRjtGH0LAg0LzQsNGB0YHQuNCy0LAKICAgICRtaW4gLSDQvNC40L0uINC60L7Quy3QstC+INC40L3RgtC10YDQsNGG0LjQuQogICAgJG1heCAtINC80LDQutGBLiDQutC+0Lst0LLQviDQuNGC0LXRgNCw0YbQuNC5CiAgICAqLwoKICAgIGZvciAoJGtleSA9IDAsICRtaW4gPSAwLCAkbWF4ID0gMzsgJG1heCA8PSA5OyAka2V5KyssICRtaW4gKz0gMywgJG1heCArPSAzKSB7CgogICAgICAgIGlmICghZW1wdHkoJG51bWJlcnNbJGtleSAtIDFdWydyZW1haW5kZXInXSkgfHwgJGtleSA9PSAwKSB7CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRudW1iZXJzKSkgewogICAgICAgICAgICAgICAgJG51bWJlcnNbJGtleV0gPSBkaXZpZGVOdW1iZXIoJG51bWJlciwgJG1pbiwgJG1heCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbnVtYmVyc1ska2V5XSA9IGRpdmlkZU51bWJlcigkbnVtYmVyc1ska2V5IC0gMV1bJ3JlbWFpbmRlciddLCAkbWluLCAkbWF4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGlzRmVtYWxlID0gMDsKICAgICAgICAgICAgaWYgKCRudW1iZXJzWyRrZXldWzBdID09IDEgJiYgJGtleSA9PSAxIHx8ICRudW1iZXJzWyRrZXldWzBdID09IDIgJiYgJGtleSA9PSAxKSB7CiAgICAgICAgICAgICAgICAkaXNGZW1hbGUgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkaW5jbGluZWRXb3Jkc1ska2V5XSA9IGluY2xpbmVXb3JkKCRudW1iZXJzWyRrZXldLCAkaXNGZW1hbGUsICRrZXkpOwogICAgICAgICAgICAkd29yZHNbJGtleV0gPSBzbWFsbE51bWJlclRvVGV4dCgkbnVtYmVyc1ska2V5XSwgJGlzRmVtYWxlLCBjb3VudCgkbnVtYmVyc1ska2V5XSkpOwoKICAgICAgICAgICAgaWYgKCRrZXkgPT0gMCkgewogICAgICAgICAgICAgICAgaWYgKGFycmF5Q2hlY2soJHdvcmRzWyRrZXldKSkgewogICAgICAgICAgICAgICAgICAgICR0ZXh0ID0gaW1wbG9kZSgnICcsICR3b3Jkc1ska2V5XSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHRleHQpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRleHQgPSAkdGV4dC4nICcuIigkbnVtYmVyKSIuJyAnLiRpbmNsaW5lZFdvcmRzWyRrZXldOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkdGV4dCA9ICIoJG51bWJlcikiLicgJy4kaW5jbGluZWRXb3Jkc1ska2V5XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChhcnJheUNoZWNrKCR3b3Jkc1ska2V5XSkpIHsKICAgICAgICAgICAgICAgICAgICAkdGV4dCA9IGltcGxvZGUoJyAnLCAkd29yZHNbJGtleV0pLicgJy4kaW5jbGluZWRXb3Jkc1ska2V5XS4nICcuJHRleHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9CgogICAgcmV0dXJuICR0ZXh0Owp9CgovKiDQktGL0LfQvtCy0LXQvCDRhNGD0L3QutGG0LjRjiDQvdC10YHQutC+0LvRjNC60L4g0YDQsNC3ICovCmZvciAoJGkgPSAwOyAkaSA8IDU7ICRpKyspIHsKICAgICRhbW91bnRbJGldID0gbXRfcmFuZCgwLCA5OTk5OTk5OTkpOwogICAgJHRleHRbJGldID0gbnVtYmVyVG9UZXh0KCRhbW91bnRbJGldKTsKICAgIGVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDOiB7JHRleHRbJGldfVxuIjsKfQ==