class MultiWriter {
    class MRSW {
        public int val = 0, ts = 0, pid = 0;
        public synchronized void setValue(int x, int seq, int id) {
            val = x;
            ts = seq;
            pid = id;
        }
    }
    int n = 0;
    MRSW V[] = null;// value written by the writer i
    public MultiWriter(int writers, int initVal) {
        n = writers;
        V = new MRSW[n];
        for (int i = 0; i < n; i++)
            V[i].setValue(initVal, 0, i);
    }
    public int getValue() {
        MRSW tsv = V[0]; // tsv is local
        for (int i = 1; i < n; i++)
            if ((tsv.ts < V[i].ts) ||
            ((tsv.ts == V[i].ts) && (tsv.pid < V[i].pid)))
                tsv = V[i];
        return tsv.val;
    }
    public void setValue(int w, int x) { // writer w
        int maxseq = V[0].ts;
        for (int i = 1; i < n; i++)
            if (maxseq < V[i].ts) maxseq = V[i].ts;
        V[w].setValue(x, maxseq + 1, w);
    }
}