Gegeben ist eine Sequenz von n Zahlen , die Sie minimieren sollen. Um eine Sequenz lexikografisch zu minimieren, können zwei erlaubte Elemente der Sequenz miteinander vertauscht werden. Sie dürfen beliebig viele Vertauschungen vornehmen. Allerdings dürfen nur bestimmte Indizes miteinander getauscht werden, während andere nicht erlaubt sind.
Lexikografischer Vergleich zweier Sequenzen
Eine Sequenz ist genau dann lexikografisch kleiner als eine Sequenz , wenn es ein k (1 ≤ k ≤ n) gibt, sodass , , …, und . Anders ausgedrückt gibt es einen Index k, bei dem gilt, während alle vorhergehenden Elemente gleich sind.
Anhand der Matrix der erlaubten Vertauschungen sollen Sie die lexikografisch kleinstmögliche Sequenz ermitteln, die sich aus der Anfangssequenz ableiten lässt.
Eingabe
Die erste Zeile der Eingabe enthält eine einzelne ganze Zahl n (1 ≤ n ≤ 300).
In der nächsten Zeile befinden sich n durch Leerzeichen getrennte ganze Zahlen (1 ≤ ≤ n), die die Anfangssequenz repräsentieren. Dabei sind alle Zahlen unterschiedlich.
Die folgenden n Zeilen enthalten n Nullen und Einsen, die angeben, ob ein Tausch zwischen zwei Indizes erlaubt ist. Steht an Zeile i und Spalte j eine 1, so bedeutet das, dass der Tausch der Elemente an Position i und j erlaubt ist. Steht dort eine 0, ist ein Tausch nicht erlaubt.
Ausgabe
Das Programm soll die lexikografisch kleinstmögliche Sequenz ausgeben, die sich aus der gegebenen Anfangssequenz ableiten lässt.