Module: الگوریتم های حریص


Problem

9 /9


Sorbet و Gelato پیام را رمزگذاری کردند

Problem

Sorbet و Gelato داده های مهمی را یاد گرفتند. این داده ها رازی است که نمی توان آن را فاش کرد، اما حجم آنها به قدری زیاد بود که امکان به خاطر سپردن کامل آنها وجود نداشت. بنابراین آنها تصمیم گرفتند آنها را رمزگذاری کنند.

Sorbet یک پیام از داده ها جمع آوری کرد. پس از دیجیتالی شدن، پیام یک دنباله M از n عدد صحیح غیر منفی بود. برای رمزگذاری، Sorbet یک کلید تصادفی K تولید کرد که آن هم دنباله ای از n عدد صحیح غیر منفی بود.
پس از آن، پیام رمزگذاری شده A را به عنوان XOR بیتی هر عنصر متناظر از پیام اصلی و کلید (Ai = Mi ⊕ K محاسبه کرد. i) .
سوربت پیام رمزگذاری شده را برای خود نگه داشت و برای اطمینان از امنیت، کلید را برای Gelato فرستاد و او آن را پاک کرد. با این حال، کانال انتقال غیرقابل اعتماد بود و Gelato کلید P را دریافت کرد که در آن برخی از عناصر K تعویض شدند. یعنی مقداری جایگشت کلید اصلی K.
را دریافت کردم
وقتی زمان رمزگشایی پیام فرا رسید، آنها از فهمیدن مشکل وحشت کردند. با این حال، سوربت به خاطر داشت که پیام اصلی از نظر لغوی بسیار کوچک بود (اما فقط شامل اعداد غیر منفی بود).
بنابراین Sorbet و Gelato تصمیم گرفتند تا دریابند کوچکترین پیامی که از نظر لغوی می تواند رمزگذاری شود چیست. به آنها کمک کنید تا آن را بفهمند.

ورودی:
خط اول شامل یک عدد صحیح n (1 ≤ n ≤ 300000) — طول پیام.
خط دوم شامل n عدد صحیح A1، A2، ...، An (0 ≤  آی < 230) — پیام رمزگذاری شده.
خط سوم شامل n عدد صحیح P1, P2, ..., Pn (0 ≤  Pi < 230) — یک کلید رمزگذاری که عناصر آن به صورت دلخواه بازآرایی می شوند.

خروجی:
چاپ یک خط با n عدد صحیح — کوچکترین پیام اصلی ممکن از نظر لغوی. به یاد داشته باشید که همه اعداد موجود در آن باید غیر منفی باشند.

مثال:
  <بدن>
ورودی خروجی
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

توضیح:
در مثال اول، راه حل (10, 3, 28) است زیرا 8 ⊕ 2 = 10، 4 + 7 = 3 و 13 + 17 = 28. 
دیگر جایگشت های کلیدی ممکن پیام های (25, 6, 10), (25, 3, 15), (10, 21, 10), (15, 21,  ;15) و (15, 6, 28) که همگی از نظر واژگانی بزرگتر از راه حل بهینه هستند.