#!/usr/bin/env python3 def intify(s): """Převede řetězec z písmen anglické abecedy na seznam čísel 0–25.""" # funkce ord(znak) vrací číslo odpovídající ASCII hodnotě znaku znak. Malá # anglická abeceda je v ASCII tabulce uložená souvisle, takže např. # ord("e") = ord("a") + 5. Alternativněji (i když o něco pomaleji) by # fungovalo psát "abcdefghijklmnopqrstuvwxyz".index(c). return [ord(c) - ord("a") for c in s] def stringify(l): """Inverzní funkce k intify, převede seznam čísel 0–25 na řetězec.""" # Funkce chr je inverzní k ord, tj. vrací znak na dané pozici ASCII # tabulky. Stejně dobře by fungovalo "abcdefghijklmnopqrstuvwxyz"[i]. return "".join(chr(i + ord("a")) for i in l) # Načítání vstupu counts = [int(x) for x in input().split()] N = int(input()) target = intify(input()) # Do out budeme postupně počítat abecedně nejbližší řetězec k řetězci target, # který jde poskládat z písmenek v counts. Jak out, tak target jsou uložené # jako pole čísel 0–25. out = [] def use(c): """Použije zadané písmenko a přidá ho na výstup.""" assert counts[c] > 0 counts[c] -= 1 out.append(c) def nonempty(): """Vrátí seznam všech písmenek abecedy (kódovaných jako 0–25), kterých máme momentálně k dispozici nenulový počet.""" # enumerate(pole) vrací postupně (0, pole[0]), (1, pole[1]), … return [i for i, count in enumerate(counts) if count > 0] # Dokud můžeme, používáme stejná písmenka jako vstupní řetězec. for c in target: if counts[c] <= 0: break use(c) smaller = [x for x in nonempty() if x < c] larger = [x for x in nonempty() if x > c] assert len(smaller) > 0 or len(larger) > 0 if smaller: # Máme k dispozici nějaké menší písmenko, tak vezmeme největší takové, # a pak budeme hladově brát co největší možná písmenka. use(max(smaller)) # Proměnná greedy_choice ukazuje na funkci. max/min umí vzít pole a vrátit # jeho nejmenší / největší prvek. greedy_choice = max else: use(min(larger)) greedy_choice = min # Teď už jen hladově bereme co nejmenší/největší písmenka. while len(out) < len(target): use(greedy_choice(nonempty())) print(stringify(out))