private SolutionData getSymbolND(String name, String type, int dimension) {

		/*
		 * Each solution data is of type: EQU or VAR Begin with ---- Terminate
		 * with ---- or **** (Summary report) *
		 */
		String regex = String.format(
				"---- %s %s\\s+(.*?)\\n(.*?)(-{4}|\\*{4})", type, name);

		// System.out.println(regex);

		Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);

		Matcher m = pattern.matcher(text);
		boolean headerFound = false;

		if (!m.find()) {
			System.err.printf("Unable to find symbol :%s %s\n", type, name);
			return null;
		}

		SolutionData data = new SolutionData();
		data.setName(name);
		data.setDescription(m.group(1).trim());
		// System.out.println("Desc: " + data.getDescription());

		data.setDimension(dimension);

		String lines[] = m.group(2).split("\n");

		for (String line : lines) {
			line = line.trim();
			// System.out.println(line);

			if (line.length() == 0)
				continue;

			Matcher headerMatcher = header.matcher(line);
			// check if this is header row
			if (headerMatcher.find()) {
				if (!headerFound) {
					headerFound = true;
					continue;
				} else {
					// encounter header from another param
					break;
				}
			}

			SolutionRow row = new SolutionRow();
			// each index is split by [whitespace]dot
			// System.out.println(line);
			String[] indices = line.split("(\\s+\\.)|[\\s\\.]");
			if (indices.length < dimension) {
				System.err.printf("Dimension mismatch :%s\n", line);
				continue;
			}

			for (int i = 0; i < dimension; i++) {
				// System.out.print(indices[i] + ".");
				row.addIndex(indices[i]);
			}
			// System.out.println();

			// skip n-1 dot
			int valueIndx = -1;
			for (int i = 0; i < dimension - 1; i++) {
				valueIndx = line.indexOf(".", valueIndx + 1);
			}

			// now valueString should contain last index and values
			// after split and ignore the first element,
			// we should get our values
			String valueString = line.substring(valueIndx + 1);

			// System.out.println(valueString);
			valueString = valueString.trim();
			String[] values = valueString.split("\\s+");

			// System.out.print("Value: ");
			// for (int i = 1; i < 5; i++) {
			// System.out.print(values[i] + ":");
			// }
			// System.out.println();
			if (values.length < 5) {
				System.err.println("Parsing error :" + line);
				continue;
			}
			row.setLower(GAMSUtil.parseDouble(values[1]));
			row.setLevel(GAMSUtil.parseDouble(values[2]));
			row.setUpper(GAMSUtil.parseDouble(values[3]));
			row.setMarginal(GAMSUtil.parseDouble(values[4]));

			// System.out.printf("Value: %f %f %f %f \n", row.getLower(),
			// row.getLevel(), row.getUpper(), row.getMarginal());

			data.addRow(row);
		}

		return data;
	}