/* @ pure */ public LinkedList<Coordinate> getEdgeFields() {

		LinkedList<Integer> occupied = new LinkedList<Integer>();
		//@loop_invariant 0 < index && index < DIM * DIM;
		for (int index = 0; index < DIM * DIM; index++) {
			if (!(fields[index] == Mark.EMPTY)) {
				occupied.add(index);
			}
		}

		LinkedList<Coordinate> edgeFields = new LinkedList<Coordinate>();

		for (int field : occupied) {
			for (Coordinate edgefield : getSurroundingFields(coordinates[field])) {
				if (!edgeFields.contains(edgefield) && isEmptyField(edgefield)) {
					edgeFields.add(edgefield);
				}
			}
		}

		return edgeFields;
	}