Module: Algorithmes gourmands


Problem

9 /9


Sorbet et Gelato ont crypté le message

Problem

Sorbet et Gelato ont appris des données importantes. Ces données sont un secret qui ne peut être divulgué, mais leur volume était si important qu'il n'était pas possible de s'en souvenir complètement. Ils ont donc décidé de les crypter.

Sorbet a compilé un message à partir des données. Après numérisation, le message était une séquence M de n entiers non négatifs. Pour le chiffrement, Sorbet a généré une clé aléatoire K, qui était également une séquence de n entiers non négatifs.
Après cela, il a calculé le message chiffré A comme un XOR au niveau du bit de chaque élément correspondant du message d'origine et de la clé (Ai = Mi ⊕ K je) .
Sorbet a gardé le message crypté pour lui-même, et pour assurer la sécurité, la clé a été envoyée à Gelato, et il l'a effacée. Cependant, le canal de transmission s'est avéré peu fiable et Gelato a reçu la clé P, dans laquelle certains éléments de K ont été échangés. Autrement dit, j'ai obtenu une permutation de la clé d'origine K.

Quand il était temps de décoder le message, ils ont été horrifiés de réaliser le problème. Cependant, Sorbet s'est souvenu que le message original était assez petit lexicographiquement (mais ne contenait que des nombres non négatifs).
Alors Sorbet et Gelato ont décidé de découvrir quel est le message lexicographiquement le plus petit qui puisse être chiffré. Aidez-les à comprendre.

Saisie :
La première ligne contient un seul entier n (1 ≤ n ≤ 300000) — longueur du message.
La deuxième ligne contient n entiers A1, A2, ..., An (0 ≤  Ai < 230) &mdash ; message crypté.
La troisième ligne contient n entiers P1, P2, ..., Pn (0 ≤  Pi < 230) &mdash ; une clé de chiffrement dont les éléments sont réarrangés arbitrairement.

Sortie :
Imprimer une ligne avec n entiers — le message original le plus petit possible d'un point de vue lexicographique. N'oubliez pas que tous les nombres qu'il contient doivent être non négatifs.

Exemples :
 
Entrée Sortie
3
8 4 13
17 2 7
10 3 28
5
12 7 87 22 11
18 39 9 12 16
0 14 69 6 44

Explication :
Dans le premier exemple, la solution est (10, 3, 28) car 8 ⊕ 2 = 10, 4 ⊕ 7 = 3 et 13 ⊕ 17 = 28. 
D'autres permutations de clé possibles donnent les messages (25, 6, 10), (25, 3, 15), (10, 21, 10), (15, 21, &minsp; 15) et (15, 6, 28), qui sont tous lexicographiquement plus grands que la solution optimale.