class Walkman {

    // constants for play speeds
    protected static final int STOPPED      =    0;	// ["protected" in 2.3]
    protected static final int NORMAL_PLAY  =  100;
    protected static final int FAST_REVERSE = -500;
    protected static final int FAST_FORWARD =  500;

    private long serno;			// serial number
    private java.util.Date dom;		// date of manufacture
					// [java.util.Date in 1.13]

    protected boolean playing;
    protected int speed;

    private static long nextSerno;	// next unassigned serial number

    public Walkman() {			// [constructors in 2.5]
	serno = nextSerno++;
	dom = new java.util.Date();
    }

    public long getSerialNumber() {
	return serno;
    }

    public java.util.Date getManufactureDate() {
	return dom;
    }

    public void play() {
	playing = true;
	speed = NORMAL_PLAY;
    }

    public void stop() {
	playing = false;
	speed = STOPPED;
    }

    public void fastReverse() {
	// may still be playing
	speed = FAST_REVERSE;
    }

    public void fastForward() {
	// may still be playing
	speed = FAST_FORWARD;
    }
}


class AutoReverseWalkman extends Walkman {

    private boolean side;		// false: side A
					// true:  side B

    public void changeSide() {
	side = !side;
    }
}


class RecordingWalkman extends Walkman {

    private boolean recording;

    public void record() {
	play();
	speed = NORMAL_PLAY;
    }

    // overrides Walkman.stop() to also stop any recording
    public void stop() {
	recording = false;
	super.stop();			// also do normal stop() behavior
    }
}


class DiscMan extends Walkman {

    private int track;

    public int currentTrack() {
	return track;
    }

    public void nextTrack() {
	track++;
    }

    public void prevTrack() {
	track--;
    }
}
