void readInput() {

        // line 1

        if(nodeNum != readInt()-1) {
            throw new Error("input out of sync");
        }
        city = readString(20);
        for (int i=0; i<maxLevel; i++) {
            zip[i] = readInt()-1;
        }
        population = readInt();
        latatude = readInt();
        longitude = -readInt();
        displacement = readInt();

        // line 2

        for (int i=0; i<maxPath; i++) {
            int p = readInt()-1;
            if (p >= 0) addPath(p);
        }

        // lines 3, 4, 5

        for (int i=0; i<maxLevel; i++) {
            for (int j=0; j<maxOrder; j++) {
                route[i][j] = readInt()-1;
                delay[i][j] = 0;
                promise[i][j] = 0;
            }
        }

        nextMsg = null;
        updating = false;
        queueLength = 0;
        useCount = 0;
        useTime = 0.0;
        tracing = false;
    }