1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <string>

using namespace std;

/**
 * Funkcja pomocnicza do przesuwania liczb w kółku 1-1000.
 * Pozwala Algosi "zakodować" liczby, a Bajtkowi je "odkodować".
 */
int transformuj(int x, int delta) {
    // Mapujemy zakres 1..1000 na 0..999 dla poprawnego działania modulo
    int v = x - 1;
    v = (v + delta) % 1000;
    // Obsługa ujemnych wyników (dla Bajtka, gdy delta jest ujemna)
    if (v < 0) v += 1000;
    return v + 1;
}

int main() {
    // Wyłączenie synchronizacji przyspiesza operacje wejścia/wyjścia
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    string rola;
    if (!(cin >> rola)) return 0;

    if (rola == "Algosia") {
        int A, B;
        if (cin >> A >> B) {
            // Przesuwamy o 500. 
            // Skoro A != B, to C != D.
            // Skoro zakres to 1000, przesunięcie o 500 gwarantuje, 
            // że C != A oraz D != B (bo C = A + 500 lub A - 500).
            int C = transformuj(A, 500);
            int D = transformuj(B, 500);
            
            cout << C << " " << D << endl;
            cout.flush();
        }
    } 
    else if (rola == "Bajtek") {
        int C, D;
        if (cin >> C >> D) {
            // Bajtek wykonuje operację odwrotną:
            // Przesunięcie o 500 w kółku 1000-elementowym 
            // jest swoją własną odwrotnością (500 + 500 = 1000 mod 1000).
            int A = transformuj(C, 500);
            int B = transformuj(D, 500);
            
            cout << A << " " << B << endl;
            cout.flush();
        }
    }

    return 0;
}