public static PlagResult run(String s1, String s2, int mML, float threshold) {
		if (mML < 1)
			System.err
			.println("OutOfRangeError: minimum Matching Length mML needs to be greater than 0");
		if (!((0 <= threshold) && (threshold <= 1)))
			System.err
			.println("OutOfRangeError: treshold t needs to be 0<=t<=1");
		if (s1.isEmpty() || s2.isEmpty())
			System.err
			.println("NoValidArgumentError: input must be of type string not None");
		if (s1.equals("") || s2.equals(""))
			System.err
			.println("NoValidArgumentError: input must be of type string not None");

		// Compute Tiles
		tiles = RKR_GST(s1, s2, mML, 20);

		// Compute Similarity
		SimVal simResult = SimilarityCalculator.calcSimilarity(
				Arrays.asList(s1.split("[\\s+|\\W+]")), Arrays.asList(s2.split("\\s+|\\W+")),
				tiles, threshold);
		float similarity = simResult.similarity;
		if (similarity > 1)
			similarity = 1;

		// Create Plagiarism result and set attributes
		PlagResult result = new PlagResult(0, 0);
		result.setIdentifier(createKRHashValue(s1), createKRHashValue(s2));
		result.setTiles(tiles);
		result.setSimilarity(similarity);
		result.setSuspectedPlagiarism(simResult.suspPlag);


		System.out.println("Identifiers: "+result.getIdentifier().id1+":"+result.getIdentifier().id2);
		System.out.println("Similarity: "+result.getSimilarity());
		System.out.print("Plagiriasm tiles: ");
		for(MatchVals tiles:result.getTiles()){
			System.out.print("("+tiles.patternPostion+",");
			System.out.print(tiles.textPosition+",");
			System.out.print(tiles.length+")");
		}
		System.out.println("\nSuspected Plagirism: "+result.suspectedPlagiarism);
		
		return result;
	}