import java.util.HashMap;
import java.util.Map;

public class Sample148 {
	private final Map<Character, Character> trMap_ = new HashMap<Character, Character>();

	public Sample148(String search, String replace) {
		for (int index = 0, len = search.length(); index < len; index++) {
			char key = search.charAt(index);
			if (0 < index && index < len - 1 && key == '-') {
				trRange(search.charAt(index - 1), search.charAt(index + 1),
						replace.charAt(index - 1), replace.charAt(index + 1));
				index++;
			} else {
				if (!trMap_.containsKey(key)) {
					trMap_.put(key, replace.charAt(index));
				}
			}
		}
	}
	private void trRange(char startKey, char endKey, char startVal, char endVal) {
		for (int offset = 0; offset <= endKey - startKey; offset++) {
			char key = slide(startKey, offset);
			if (!trMap_.containsKey(key)) {
				char val = slide(startVal, offset);
				if (val > endVal) val = endVal;
				trMap_.put(key, val);
			}
		}
	}
	private char slide(char org, int offset) {
		return (char) (org + offset);
	}

	public String tr(String str) {
		StringBuilder builder = new StringBuilder();
		for (char c: str.toCharArray()) {
			if (trMap_.containsKey(c)) {
				builder.append(trMap_.get(c));
			} else {
				builder.append(c);
			}
		}
		return builder.toString();
	}


	public static void main(String[] args) {
		System.out.println(new Sample148("qwertyuiop", "QWERTYUIOP").tr("typewriter"));
		System.out.println(new Sample148("a-z", "A-Z").tr("typewriter"));
		System.out.println(new Sample148("a-z", "A-X").tr("vwxyz"));
	}
}
