package math.cipher;

import stdlib.StdIn;

/*************************************************************************
 *  Compilation:  javac HammingEncoder.java StdIn.java
 *  Execution:    java HammingEncoder < all4.txt
 *  
 *  Read in sequences of 4 bits at a time from stdin, compute
 *  3 parity bits for Hamming code, and print resulting 7 bits
 *  to stdout.
 *
 *
 *************************************************************************/

public class HammingEncoder {

    // return an integer corresponding to the 4 digit hex string
    public static int fromHex(String s) {
        return Integer.parseInt(s, 16)  & 0xFFFF;
    }

    public static void main(String[] args) {
        while(!StdIn.isEmpty()) {
            int m1 = fromHex(StdIn.readString());
            if (m1 == 0xFFFF) break;
            int m2 = fromHex(StdIn.readString());
            int m3 = fromHex(StdIn.readString());
            int m4 = fromHex(StdIn.readString());

            // compute parity bits
            int p1 = m1 ^ m2 ^ m4;
            int p2 = m1 ^ m3 ^ m4;
            int p3 = m2 ^ m3 ^ m4;

            // print results
            System.out.print(m1 + " " + m2 + " " + m3 + " " + m4 + " ");
            System.out.print(p1 + " " + p2 + " " + p3);
            System.out.println();
        }
    }
}
