/* what's wrong with the name of this class?  :-)  */

public class SideEffectTester {
	private int x;
	private int y;
	private String s1;
	private String s2;
	private SideEffectTester pal;
	
	public SideEffectTester(int x, int y, String s) {
		this.x = x;
		this.y = y;
		s1 = s;
		s2 = s.toUpperCase();
	}
	
	public void rubbish(SideEffectTester st) {
		pal = st;
		blah();
	}
	
	public void blah() {
		System.out.println("***" + s1);		
		System.out.println("***" + s2);		
		System.out.println("###" + pal.s1);
		System.out.println("###" + pal.s2);
	}
	
	public void mangle(int x, SideEffectTester st) {
		y = x;
		blah();
		st.x = (pal != null) ? pal.x : x;
		
		s1 = "" + this.x;
		
		st = this;
		
		st.x = y;
	}
	
	public void kruftulate(String s, SideEffectTester st) {
		s1 = st.s1;
		pal.s1 = pal.pal.pal.s1;
		blah();
		s = s.toUpperCase();
		st.s1 = s;
		pal = st.pal;
		blah();
	}
	
	public static void main(String[] args) {
		SideEffectTester s1 = new SideEffectTester(5, 6, "fred");
		SideEffectTester s2 = new SideEffectTester(3, 2, "barney");
		SideEffectTester s3 = new SideEffectTester(9, 8, "wilma");
		SideEffectTester s4 = new SideEffectTester(1, 4, "betty");

		s1.rubbish(s2);
		s2.rubbish(s3);
		s3.rubbish(s1);
		s4.rubbish(s2);
		
		s1.mangle(4, s3);
		s3.mangle(2, s2);
		
		s1.kruftulate("pebbles", s4);		
		s2.kruftulate("ps", s1);
		s3.kruftulate("pps", s2);
		s4.kruftulate("whammy", s3);
	}
}