public void sbtAlgorithm() throws Exception {
		if (_isFirstAgent()) {
			// create cpa
			CPA cpa = generate_CPA();
			// Assign CPA
			this._assign(cpa);
		}
		while (!this._done) {
			Message msg = this._mailer.receive_msg(this._id);
			switch (msg.type()) {
			case "Stop":
				this._done = true;
				break;
			case "Backtrack":
				// remove last assignment
				msg.cpa().remove_assignment();
				// assign CPA
				this._assign(msg.cpa());
				break;
			case "CPA":
				// assign CPA
				this._assign(msg.cpa());
				break;
			default:
				break;
			}
		}
	}