private void update(CovingtonConfig covingtonConfig, int trans) throws MaltChainedException {
		if (trans == SHIFT || trans == RIGHTARC) {
			covingtonConfig.setRight(covingtonConfig.getRight() + 1);
			covingtonConfig.setLeft(covingtonConfig.getRight() - 1);
		} else {
			int leftstop = covingtonConfig.getLeftstop();
			int left = covingtonConfig.getLeft();
			if (trans == NOARC) {
				DependencyStructure dg = covingtonConfig.getDependencyStructure();
				DependencyNode leftNode = covingtonConfig.getInput().get(covingtonConfig.getLeft());
				if (dg.getTokenNode(leftNode.getIndex()) != null && dg.getTokenNode(leftNode.getIndex()).hasHead()) {
					left = dg.getTokenNode(leftNode.getIndex()).getHead().getIndex();
				} else {
					left = leftstop - 1;
				}
			} else {
				DependencyNode rightNode = covingtonConfig.getRightTarget();
				left--;
				DependencyNode leftNode = null;
				while (left >= leftstop) {
					leftNode = covingtonConfig.getInput().get(left);
					if (rightNode.findComponent().getIndex() != leftNode.findComponent().getIndex()) {
						break;
					}
					left--;
				}
			}
			
			if (left < leftstop) {
				covingtonConfig.setRight(covingtonConfig.getRight() + 1);
				covingtonConfig.setLeft(covingtonConfig.getRight() - 1);
			} else {
				covingtonConfig.setLeft(left);
			}
		}
	}