Statistics

Problem Statement for "ExpertSystem"

Problem Statement

"Expert systems" are specially designed artificial intelligence programs created to solve problems which would normally require human intelligence. Various mathematical packages, for example, can easily solve very difficult problems which would take a long time to solve unaided.

Your task is to write a small part of such a mathematical package - an inference engine that takes, as input, rules describing relationships between terms (variables or integers), and two terms whose relationship is to be determined. The engine must process these rules, and determine the relationship between two given terms, if possible.

Each rule will tell the engine the relationships between two or more terms. For example, a rule might be "a < b <= 47", which means exactly what you would expect: a is less than b, which is less than or equal to 47. Another rule might be "a = 25 = c", meaning that both a and c represent the value 25.

Rules will be given in the following form:

<rule> ::= <lessthan> | <greaterthan> | <equalto> | <unequalto>
<lessthan> ::= <term><lts><term> | <term><lts><lessthan>
<greaterthan> ::= <term><gts><term> | <term><gts><greaterthan>
<equalto> ::= <term><eqs><term> | <term><eqs><equalto>
<unequalto> ::= <term><uneqs><term>

<term> ::= <var> | <int>
<var> ::= A variable represented by between 1 and 46 lowercase letters, inclusive
<int> ::= A positive integer between 1 and 1000000000, inclusive, with no leading zeroes
<lts> ::= " < " | " <= "
<gts> ::= " > " | " >= "
<eqs> ::= " = "
<uneqs> ::= " != "

The engine should parse the rules and check for inconsistencies. If any are found, it should immediately return the string "CONTRADICTION". Otherwise, if the relationship can be inferred, the engine should return it between the two terms (leftTerm and rightTerm) with leftTerm on the left hand side of the equation and rightTerm on the right hand side. If multiple relationships can be inferred (i.e. "<" and "<=") the engine should return the most specific relationship that can be inferred. For example, "<" is more specific than both "<=" and "!=", while "=" is more specific than both "<=" and ">=". If no inference can be made, the string "UNKNOWN" should be returned instead.

Definition

Class:
ExpertSystem
Method:
testEngine
Parameters:
String[], String, String
Returns:
String
Method signature:
String testEngine(String[] rules, String leftTerm, String rightTerm)
(be sure your method is public)

Notes

  • Neither leftTerm nor rightTerm is guaranteed to be mentioned in rules. (See example 0.)
  • If there are any inconsistencies among the rules, the inference engine should immediately return "CONTRADICTION", regardless of the values of leftTerm and rightTerm. (See example 1.)
  • A variable can represent any real number; they are not limited to integers. (See example 2.)

Constraints

  • There will be at most 30 distinct terms mentioned in rules (up to 32 total terms, including leftTerm and rightTerm).
  • rules will contain between 0 and 50 elements, inclusive.
  • Each element of rules will contain between 5 and 50 characters, inclusive.
  • Each element of rules will contain only lowercase letters ('a'-'z'), digits ('0'-'9'), space characters (' '), and characters from the string "<>!=" (quotes for clarity).
  • Each element of rules will conform to the grammar above (see definition of ).
  • leftTerm and rightTerm will each contain between 1 and 50 characters, inclusive.
  • leftTerm and rightTerm will each contain only lowercase letters ('a'-'z') or digits ('0'-'9').
  • leftTerm and rightTerm will each conform to the grammar above (see definition of ).

Examples

  1. {"green < red <= 881 <= blue < black", "blue != red"}

    "black"

    "600"

    Returns: "black > 600"

    The engine knows that black > blue, blue >= 881, and 881 > 600. (Note that it was able to determine the last inequality even though 600 was never mentioned in rules.) Therefore, black > 600.

  2. {"a < b <= c", "d >= e > f","g = h = i = j", "g < f < e", "j != h"}

    "123"

    "456"

    Returns: "CONTRADICTION"

    The contradiction is that the variable h is said to both be equal to and unequal to the variable j. Even though the engine can still figure out the relationship between the two terms ("123 < 456"), the string "CONTRADICTION" should be returned.

  3. {"369 < x < y < z < 370"}

    "x"

    "371"

    Returns: "x < 371"

    There is no contradiction here, because variables can be equal to any real number; they are not limited to integers.

  4. {"a >= b","c != d","e < f < g"}

    "x"

    "y"

    Returns: "UNKNOWN"

    Neither variable is mentioned in the rules, so the relationship between them is not known.

  5. {"a >= b","c != d","e < f < g"}

    "z"

    "z"

    Returns: "z = z"

    Even though z is not mentioned in the rules, a variable is always equal to itself.

  6. {"a <= b","a = b","a >= b"}

    "b"

    "a"

    Returns: "b = a"

    This is an example of operator precedence. The most specific relationship that you know about a and b is that they are equal.

  7. {"a <= b","a >= b"}

    "b"

    "a"

    Returns: "b = a"

    The same inference can be made as in the example above, this time with process of elimination.

  8. {"1234 <= a < b <= 1234"}

    "a"

    "b"

    Returns: "CONTRADICTION"

  9. {"ok = fine","error < error"}

    "ok"

    "fine"

    Returns: "CONTRADICTION"

  10. {"crash != crash"}

    "123"

    "456"

    Returns: "CONTRADICTION"

  11. {"crash <= crash"}

    "123"

    "456"

    Returns: "123 < 456"

  12. {"big != small", "big >= small"}

    "big"

    "small"

    Returns: "big > small"

  13. {"a < b < c", "a > d", "e > c", "e <= d"}

    "f"

    "g"

    Returns: "CONTRADICTION"

  14. {"a = b = c","d = e = f","b <= e", "f <= a"}

    "d"

    "c"

    Returns: "d = c"

  15. {"a = b = c","d = e = f","b <= e", "f <= a"}

    "d"

    "100"

    Returns: "UNKNOWN"

  16. {"x <= y <= z","x <= 999", "1001 <= z"}

    "x"

    "z"

    Returns: "x < z"

  17. {"x <= y <= z","x <= 999", "1001 <= z"}

    "x"

    "y"

    Returns: "x <= y"

  18. {"864 != 468"}

    "864"

    "468"

    Returns: "864 > 468"

  19. {}

    "abc"

    "xyz"

    Returns: "UNKNOWN"

  20. {}

    "666"

    "666"

    Returns: "666 = 666"

  21. {}

    "1000000000"

    "3"

    Returns: "1000000000 > 3"

  22. {"abcdefghijklmnopqrstabcdefghijklmnopqrstzzzzzz = 3","1000000000 > 999999999 >= 2 > 1", "4 != 5"}

    "abcdefghijklmnopqrstabcdefghijklmnopqrstzzzzzzzz"

    "1000000000"

    Returns: "UNKNOWN"

    abcdefghijklmnopqrstabcdefghijklmnopqrstzzzzzz abcdefghijklmnopqrstabcdefghijklmnopqrstzzzzzzzz

  23. {"a <= b","b <= a"}

    "a"

    "b"

    Returns: "a = b"

  24. {"9696 = 6969"}

    "6969"

    "9696"

    Returns: "CONTRADICTION"

  25. {"123 < 456"}

    "123"

    "456"

    Returns: "123 < 456"

  26. {"123 >= 123"}

    "123"

    "456"

    Returns: "123 < 456"

  27. {"a < 2"}

    "a"

    "1"

    Returns: "UNKNOWN"

  28. {"a < b < c < d < e < f < g < a"}

    "1"

    "1"

    Returns: "CONTRADICTION"

  29. {"a < b < c < d < e < f < g < 1"}

    "a"

    "1"

    Returns: "a < 1"

  30. {}

    "a"

    "1"

    Returns: "UNKNOWN"

  31. {"a <= b","b != c","a < c"}

    "a"

    "c"

    Returns: "a < c"

  32. {"a != e","a <= 2","a < 4","b > c","b > f","b = g","b > 5","c > e","c >= f","c != h","d != f","d != g","d != 1","d < 3","e != 3","f <= 1","f < 2","f != 4","g < h","h >= 1","h != 2"}

    "4"

    "g"

    Returns: "4 < g"

  33. {"a != b","a < c","a > d","a > e","a <= 1","a < 2","b < c","b != d","b != h","b != 1","b >= 3","b > 4","c != 1","c >= 2","c >= 3","c >= 5","d >= e","d != f","d <= 5","e <= f","e != h","e != 3","e != 5","f != 3","f >= 5","g >= 1","h >= 1","h > 3","h > 5"}

    "2"

    "h"

    Returns: "2 < h"

  34. {"a > c","a != f","a >= h","a >= 2","a >= 3","b = c","b != d","b <= h","b >= 2","b >= 3","b != 5","c >= e","c != h","c > 1","c > 3","c <= 5","d <= e","d < f","d >= 1","e < h","e >= 1","e < 3","e != 5","f < g","f != 4","f >= 5","g < h","h >= 5"}

    "1"

    "g"

    Returns: "1 < g"

  35. {"a <= b","a < c","a < d","a <= e","a < f","a < h","a < 2","a != 4","b > d","b >= f","b < g","b = 1","b != 5","c = e","c > f","c >= g","c <= h","c > 1","c < 5","d != h","e >= f","e >= g","e > 1","f != 2","f < 4","f <= 5","g != 1","h >= 2","h <= 5"}

    "d"

    "1"

    Returns: "d < 1"

  36. {"a >= c","a <= f","a > g","a >= 1","b > d","b != h","b >= 1","b > 3","c < g","c < 1","c < 2","c != 3","d > f","d != 4","d > 5","e <= g","e != 4","f > g","f > 2","f != 4","g <= 2","g <= 3","h >= 3","h != 4","h > 5"}

    "b"

    "5"

    Returns: "b > 5"

  37. {"a >= 1","b <= d","b <= f","b < h","b < 1","b < 2","b < 3","b != 4","c = f","c < 3","c <= 5","d != e","d = g","d <= 2","d != 4","d != 5","e > h","f = g","f != h","f < 5","h > 1","h <= 2","h < 4","h < 5"}

    "b"

    "e"

    Returns: "b < e"

  38. {"a >= d","a > f","a < g","a > 1","a != 3","a != 4","a < 5","b > d","b >= e","b = f","b > 1","c != f","c = g","c != h","c > 3","d > e","d > 1","d <= 4","d < 5","e != 1","e != 3","f < g","f <= 2","f != 3","f < 5","h > 2","h >= 3"}

    "d"

    "3"

    Returns: "d < 3"

  39. {"a >= b","a > c","a != g","a >= 1","a != 3","a != 5","b > f","b >= 1","b <= 3","c > d","c < e","c != 1","c < 5","d != g","d < h","d != 1","d != 3","e != f","e = h","e <= 3","e < 5","f != g","f <= 1","f < 5","g >= h","g >= 1","g > 3","g > 4","h >= 2","h <= 3","h <= 5"}

    "f"

    "2"

    Returns: "f < 2"

  40. {"a != b","a > g","a != 1","a > 5","b > c","b >= e","b = g","b != h","c > d","c > f","c != h","c > 2","c != 5","d < 1","d <= 3","e < f","e != g","e != 3","e <= 4","e <= 5","f > 1","f > 3","f > 4","f >= 5","g != 4","h <= 2","h != 3","h <= 4"}

    "a"

    "f"

    Returns: "a > f"

  41. {"a <= c","a != d","a < h","a <= 3","a <= 5","b != d","b != g","b = 1","b != 2","c <= e","c <= g","c < h","c != 3","c < 4","d <= h","d > 2","d != 3","e < h","e = 1","e != 4","f < h","f != 2","g >= h","g < 3","g < 5","h != 1","h <= 4"}

    "g"

    "f"

    Returns: "g > f"

  42. {"a < d","a < e","a <= g","a > 2","b < c","b != e","b >= 1","b >= 2","b > 3","c != d","c != f","c = h","c > 3","c < 5","d <= e","d < f","d != h","d <= 3","e < 5","f != 2","f > 3","f != 4","f != 5","g != h","g <= 3","g < 4","h != 2","h >= 4"}

    "5"

    "g"

    Returns: "5 > g"

  43. {"a >= d","a > g","a != 4","b < d","b >= e","b < f","b != 1","b < 3","c < e","c != f","c = h","c < 2","c < 3","c <= 4","d > e","d != g","d > h","d != 5","e > g","e > 1","e < 4","f >= h","f < 3","g <= 2","g != 3","h < 2"}

    "c"

    "5"

    Returns: "c < 5"

  44. {"a != d","a <= f","a > 3","b != c","b != e","b <= g","b < 1","b < 2","b <= 3","b <= 5","c <= 4","d < e","d >= 1","d >= 3","d >= 4","e < g","e >= h","e >= 1","e != 2","e <= 5","f >= 1","f > 2","g != 1","h > 2","h <= 5"}

    "g"

    "4"

    Returns: "g > 4"

  45. {"a != b","a >= c","a != e","a >= f","a != 1","a != 2","a >= 3","b <= c","b < e","b = f","b <= g","b < h","b = 1","b != 2","b != 4","b != 5","c > 1","c <= 5","d > f","d != g","d < h","d > 1","e > h","e != 3","f <= h","f != 5","g >= h","g >= 3","h < 4","h < 5"}

    "f"

    "4"

    Returns: "f < 4"

  46. {"a > 2","a > 3","a < 4","a <= 5","b <= c","b < d","b < e","b != g","b >= 3","b != 4","c > d","c != f","c <= 5","d = e","d >= f","d >= g","d >= 1","d != 3","d >= 4","e > f","e != g","e > h","e != 1","f > g","f = h","g >= 2","g <= 4","h != 3","h != 4"}

    "2"

    "h"

    Returns: "2 < h"

  47. {"a < 2","a <= 3","a <= 4","b >= d","b < h","b >= 3","b < 4","c >= e","c < h","c > 3","d != e","d >= g","d = 1","d != 5","e >= g","e != 1","e != 2","e != 3","e >= 4","f > 5","g = 1","g < 3","h > 2"}

    "h"

    "3"

    Returns: "h > 3"

  48. {"a < b","a < d","a < f","a < 1","a <= 4","a < 5","b >= d","b > 1","c = d","c > e","c >= f","c >= 1","c != 2","c != 3","c > 4","e >= f","e > 1","e > 2","f != 3","f != 5","g != 3","g != 5","h != 1","h >= 5"}

    "4"

    "b"

    Returns: "4 < b"

  49. {"a != f","a < g","a < 5","b = c","b >= d","b != e","b >= h","b > 1","b <= 2","b != 3","c > f","c <= 3","d = f","d = 1","d != 3","e > f","e >= h","f = 1","g >= 1","g >= 3","g < 4","g <= 5","h < 4"}

    "b"

    "g"

    Returns: "b < g"

  50. {"a != b","a <= c","a >= d","a >= f","a > g","a > h","a < 4","b > c","b > g","b >= h","c != h","c > 1","c >= 4","c > 5","d = e","e != g","e < 2","e != 5","f <= g","g >= 3","h >= 3","h < 4"}

    "b"

    "d"

    Returns: "b > d"

  51. {"a >= c","a = d","a != f","a = g","a != 3","a != 5","b <= f","b < g","b < 1","b <= 2","b < 3","c < 4","d > 2","e != g","f > 4","g > 3","h <= 1","h < 5"}

    "g"

    "c"

    Returns: "g >= c"

  52. {"a > c","a = g","a < 2","a != 3","a <= 4","a != 5","b != c","b > f","b > 1","b <= 2","b <= 5","c <= e","c <= h","c < 2","d < f","d <= g","d < 5","e < 2","e < 4","f != g","f < h","f <= 5","g < h","g < 5","h >= 2"}

    "a"

    "f"

    Returns: "a != f"

  53. {"a < b","a <= d","a <= f","a != h","a != 1","a < 3","a < 4","b = c","b >= d","b > f","b >= h","b != 1","b < 5","c >= g","c <= 5","d != e","d >= g","d <= 2","d != 4","d != 5","e >= f","e >= g","e >= 3","e >= 5","f != 1","f >= 2","f != 3","f >= 4","g != h","h != 1","h > 2","h <= 4"}

    "c"

    "4"

    Returns: "c > 4"

  54. {"a < d","a < f","a != h","a < 1","a <= 5","b >= e","b = h","b <= 3","b <= 4","b != 5","c >= d","c > h","c >= 3","d > f","e < 2","h <= 1","h != 2"}

    "a"

    "2"

    Returns: "a < 2"

  55. {"a != d","a = e","a > f","a >= g","a != h","a >= 3","a < 4","b != c","b != f","b > g","b >= 1","b >= 2","c != d","c <= g","c <= 5","d <= f","d != h","d != 1","d < 2","d < 3","e > f","e >= 1","e >= 2","e >= 3","e <= 4","f >= g","f != 1","f != 3","g >= 1","g <= 4","g != 5","h >= 2","h >= 5"}

    "e"

    "h"

    Returns: "e < h"

  56. {"a < c","a > 1","b >= c","b != h","c > g","c >= 5","d < g","d = 1","d != 2","d != 4","d < 5","e != g","e != h","e >= 2","e >= 4","e > 5","f = h","f >= 5","g < 3","g <= 5","h > 4"}

    "g"

    "1"

    Returns: "g > 1"

  57. {"a >= f","a <= 3","a <= 5","b > g","b > h","b < 2","c != 1","c > 2","c < 4","c < 5","d = e","d <= 1","e < f","e >= h","e = 1","e != 3","e != 4","e < 5","f != g","f >= h","f <= 2","f != 5","g > h","g < 1","h < 1","h < 2","h < 5"}

    "1"

    "f"

    Returns: "1 < f"

  58. {"a != g","a = 1","b >= d","b >= 3","b > 4","b != 5","c > e","c > g","c != 2","c <= 5","d < f","d != g","d > 2","d <= 4","e <= f","e > 1","e != 5","f != 1","f < 3","f < 4","g >= h","g <= 3","g <= 4","h != 1"}

    "a"

    "4"

    Returns: "a < 4"

  59. {"a < d","a < e","a <= f","a != h","a != 1","a <= 4","b > c","b != e","b <= 3","b != 4","b < 5","c >= g","c != 1","c <= 2","d < 1","d < 2","e = g","e >= h","f >= 1","f <= 3","g != 1","g < 3","g != 4","h > 1","h != 2","h < 4"}

    "3"

    "c"

    Returns: "3 > c"

  60. {"a != b","a != d","a < g","a < 1","b < e","b <= f","b != h","b <= 5","c = h","d >= 3","d != 5","e < 2","e <= 3","f = g","f > 4","f <= 5","g < h","g > 3","g != 4","g <= 5","h >= 2"}

    "a"

    "h"

    Returns: "a < h"

  61. {"a = d","a >= g","a != 3","a != 5","b > c","b >= g","b >= 3","b >= 5","c != d","c != f","c < 2","d != f","d != 3","d >= 5","e <= f","e != 1","e > 4","e > 5","f > 3","f > 5","g != h","g >= 2","g < 3","g != 5","h > 1","h >= 2"}

    "a"

    "2"

    Returns: "a > 2"

  62. {"a < b < c < d < e < f < g < h < i < j < k < l < m", "n < o < p < q < r < s < t < u < v < w < x < y < z", "a < c < e < g < i < k < m < o < q < s < u < w < y", "b < d < f < h < j < l < n < p < r < t < v < x < z", "a > aa > ab > ac"}

    "wi"

    "wr"

    Returns: "UNKNOWN"

  63. {"z < w","m < s","l < z","c < a","j < p","v < l","a < f","b < v","e < b","h < n","u < y","k < x","o < e","y < k","d < i","r < j","g < c","n < m","x < g","q < r","s < o","w < t","i < u","f < h","p < d"}

    "q"

    "t"

    Returns: "q < t"

  64. {"y < e","n < s","a < d","z < x","d < g","p < z","l < m","e < f","q < h","v < o","o < n","u < p","g < c","h < y","w < q","c < j","k < i","r < w","m < t","f < l","x < b","t < a","s < k","b < v"}

    "u"

    "j"

    Returns: "UNKNOWN"

  65. {"b <= d < g < j < k < n < o <= s < t < u <= v <= y","d < f < h <= j <= k <= m < o <= q <= r <= v <= w","d < g <= k < m < o <= p < r < s < t < u <= v < w","a <= d < g <= h <= j <= p < q <= s < t < u <= v","a <= b < c <= g < i < j <= n < q < r <= t <= v < y","b < c <= d <= g < h <= i < p <= u <= w <= x < y","e < h <= i < j < l < n < p <= q < r < s <= u < v","a < g < j <= k < m < o < p <= r < s <= t <= w <= x","a <= f < g <= j < k <= l < n <= s <= u < w < x < y","a <= b <= c < e <= h < j <= k < p < q < s <= v < z","a <= b <= f <= g < i < k < l < m < n <= q < w <= y","a < b <= f <= h < k <= p <= q < s <= t <= x < z","b < c < d <= f < h <= i <= l < n <= o < p <= s < u","c <= d < g <= j < m <= o < q <= u < v < w <= y < z","b <= e < f <= h <= k < l < m < o < p <= s < w < y","b <= d <= f < g <= k <= m <= n <= p < u < x < z","a <= b < c <= d <= e < k < n <= p < q <= r < v < y","a <= b < d < e <= f <= g < h < i < m <= q < t < x","b < c < d < e < f <= h < l <= o < p < q <= y < z","b < d < f <= g < j <= o < p <= s < t <= v <= w < x","b <= c <= d < e < h < m < n < o < q <= s < v < x","a <= c < e <= f < h <= k < l < o <= q <= r < v < w","d <= f < h <= j <= o <= p < q <= r <= s < u <= y","e <= f < h < m <= n < o <= q < t <= v <= w < y < z","a < e < g <= j <= k <= m < o <= p < s <= t < u < w","b <= c < d <= e < f <= j <= l < m < n < o <= p < z","d < g < i <= k < n <= p <= q < r <= s <= w <= y","e < l <= n <= p < q < r <= t <= u < v < w <= x < y","a < c < e < g < j < p < r <= u <= v <= x < y <= z","c < e < f < k < m < n <= q <= r <= s <= u < v < y","d <= e <= l < n < o < p <= q <= r <= v <= w <= y","a < b < c <= d <= f <= h < i <= k <= l < v <= x","a <= d <= g <= h <= m <= n <= p <= q <= s <= t < x","a <= b < d < e <= j <= l <= n < p < t < v < y <= z","d <= h < j <= l < m <= n <= q < u <= w < y <= z","c < h <= j <= k <= l <= m < o <= p <= r <= x < z","c < d <= g <= l <= m <= q <= r < u < v <= w <= y","a <= b <= c < d <= g <= q <= r < s < t < u < w < z","b <= d <= e <= f < l < m < n < o < q < s < t <= w","b <= c < e <= h <= l < m < o <= p <= s <= t <= y","c <= d <= e <= j < k <= o <= s <= u < w < x <= z","c <= e <= m < n <= o <= p < q < r <= s <= v <= y","a < d < e < g < j < k <= n < p < r < s <= w < z","a < d <= e <= i < l < n <= p < s < u <= v < w < y","b <= c < d < g <= h < i <= k < l <= o < w < y < z","c <= f < l < m < n < o < r < v < w <= x < y < z","a <= c <= e <= f < i <= l < m <= n <= r < w <= y","c <= d < f < l <= m <= n < q < r < s < u <= v < z","c <= e < f < i <= j < o <= q < s <= t <= v <= w","a <= g <= j < k <= l <= n <= o < p < r < s < w < y"}

    "x"

    "n"

    Returns: "x > n"

  66. {"b <= c < d <= e <= h <= j <= k < m < p < v < w < x","d < e < f < h < k <= l < o <= p < q < t <= v <= y","a < b <= c < e <= g < h < i <= l <= u < x <= y < z","b <= e <= g < k <= l < m <= n <= r <= s < t < v","b < c < d <= i <= k < l <= m <= q < s < t < y < z","a < g <= h <= i < j <= m < n < p < r <= w <= x < y","a <= b < c <= g <= h <= k < n <= p <= s <= u < x","a < b < c < f <= i < j <= k <= l < p <= r <= v < x","b < f < g <= j < k <= n <= o <= q < v < x <= y < z","c <= f < g < j < l <= m <= n <= o <= t <= x <= z","a < c <= d < f <= g < j <= m <= q < r <= s < t < x","a <= d < e <= j < l < n < r < t < v <= w < x < z","a < c <= d < e <= j <= l <= m <= n < q <= r < t","a < d <= e < f <= h <= i < k <= m <= n < r < w < z","a <= c < e < h < i <= l <= m < n < q <= t < u <= y","a <= f <= m <= q < r <= u < v <= w <= x <= y < z","c < e < f <= g < h < k < m <= o < p < x <= y < z","b <= c <= d <= e < h < i <= l < q < r < u < v < w","a < c <= f <= h < j < k < m <= n <= q <= t <= w","b < d <= e <= f < i <= j <= o <= r < t <= w < x","a < b <= d <= f < h <= i < j < k < m < u <= v < y","a <= c <= d < h < m < o < q <= s <= v <= w <= y","b < c <= e < g <= i < j < l <= p <= s < u < x <= z","b < e <= g < i < j <= l < m <= n < p <= q <= t < u","a < b <= c < d <= g <= j <= l < n <= o <= s <= u","b < c <= f <= i < q <= r <= s < t <= u < x <= z","a < c < d < e <= f <= k <= l < o <= q < v < x <= y","a <= c < h < m < n < p <= r <= t <= u < v < y <= z","a < e <= f < g <= j < k < l < m < n <= v <= y < z","b < c <= d < e < g <= l < n < p <= r < v <= w < z","a < b <= c <= e <= g < h < k < n < o < w <= x < z","b < c <= d <= e <= f < g <= h <= i < j < u <= w","a <= c < d < f < g <= i <= n < p < q < r <= v <= x","d < e <= g < i <= k <= l <= n < o < u <= v <= w","c <= d <= e < g <= h <= j < l < q < u < v < w <= x","b <= d < e < f < i < m < n < q <= r <= s < t < y","b < c <= f < k <= p <= q <= s < t < v <= w <= z","a < c <= d <= e < g < h < j <= m <= s <= t < x < z","a < b < e < f <= g < h < i < j <= k <= m < r <= t","a < b < c <= d < f <= g < i <= j < k <= q <= t < w","d <= e < f < k < q <= r <= s < t <= u <= w < y < z","b < g <= j <= m < o < p <= q <= r <= t < v < w < x","a < b < c < i <= j < l < m <= s <= u < x <= y <= z","d < e < j <= m <= n <= o <= p <= q <= r < x <= y","a < d <= g < j < k < l < p <= r <= s <= v <= w < x","a < b < d < e < f < k < m < o < q < r < u <= w < x","d <= f <= h < k <= n <= o <= p <= r <= u <= v <= w","c < d < e <= g <= h < j < k <= l < r <= w < x <= y","b <= c <= e <= g <= j < n < r < s <= t <= u <= z","c <= f <= g <= h < j < k <= o <= p <= q < r < z"}

    "v"

    "o"

    Returns: "v > o"

  67. {"b < h < k < l < m < o <= p <= q < r < s < v <= x","b <= c <= d <= e <= h <= j <= k < r <= u <= v <= x","b <= d < e <= g <= h <= i <= m <= n <= p <= x <= y","a < b < c < i <= j < n < o < r <= s < t < w <= y","b <= c <= g <= h <= k < n < o <= r <= s <= t < x","c <= e <= g < h < j < k < n <= p <= t < u < v < z","c < i <= j < k <= l < p < r < t <= u < w < x <= z","a <= c <= d < f <= j <= l <= m <= p < q < t <= v","a < d < f <= j < l < m < n < q <= s <= u < v < w","b < c < j < l < o <= p <= s < t < v <= x < y < z","a <= c < f < h <= j <= k <= o <= q < r < u < v < w","a < f < g < h < i < j <= k < l < n <= o < v < y","b <= c < e < f <= l <= m <= o <= p <= t <= v <= z","a <= b <= d < e <= f <= i < o <= q <= s < x <= y","b < c < d <= f < j <= k < l < m < r <= s < w < z","b <= c <= d < g < n <= o < q <= r < t <= u <= w","a < b < d <= g < i <= l < n <= p < s <= t < u < x","e <= f <= g <= h <= k < o < q <= r < u <= v < z","a <= b <= c < i < j <= k <= l < o <= r <= s < v","a <= c < e < g < n < o <= p <= r <= u < v <= x < y","d < e <= h < i < j < l <= m <= n < q < u <= v <= z","a < c < g <= j < k <= m <= n <= p <= s <= t < x","b <= g < h <= j <= l <= m <= n < q <= w < y < z","b <= e < f <= i < k <= q < r < u < v < w < y <= z","d < f < h < i <= j <= k < o <= p < s <= t < u < x","b <= d < g < h <= k <= l < n < t <= u <= v < w < x","a < b < c < h <= i <= l < n <= p <= q < u <= v < y","e <= f <= h < l < m < n < p < r <= t <= u < v < z","b <= d <= g < j < k < n < o < p <= v < w <= y < z","e < f <= j < l < m < n < o < q <= r <= s <= v < z","c <= d <= e < g <= h <= l <= m <= p < v <= w <= x","b <= c <= d <= e < i <= l <= o <= r <= s <= u <= x","a < b < e < i < l < m < p <= q <= r < v < y < z","c <= d < e < g < i <= l < q < r < u < v <= y < z","a < c < h <= i < j <= m < n <= o < p < s < u <= x","c < e <= k <= n < o < r < s <= u <= w <= x <= y","d < e < j < l < m <= o <= p < s <= t <= u <= y < z","b <= f <= h < j <= k <= n <= q < s <= t < u <= v","a < b <= c < d <= h <= j < k < p < r < t < u < w","c <= e < g < h < n < r < s <= t <= w <= x < y < z","c <= d < j <= k < l < n < r < s <= t <= u < w < y","b < f <= g < j < m < n < o <= p <= r <= u <= w < x","a <= b < c < f < p <= q < r < t < u < v <= y < z","a <= c <= f < j <= k <= m < p < q <= r < v <= z","b <= f < h < j <= l < o <= p <= s <= t <= u <= y","a < i < n <= o <= p < q < r < s < t <= u <= w < x","b < g < h <= i <= k <= m < n <= o <= r <= u <= y","d < f <= g <= h <= j <= k < n <= q < r <= v < y","b < f <= g <= h <= m < n < p < q < r <= u <= w < z","a < j <= k <= m < n < p <= q <= s <= x < y <= z"}

    "j"

    "b"

    Returns: "j > b"

  68. {"b < c <= h <= i < l <= m <= p < q <= u < x <= y","a <= b <= e <= n <= o <= p <= q < r < t <= x < y","e <= f <= g < l <= m <= p < q < r < s < w < x <= z","c < d < g < i < j < m <= o <= p < t <= w <= x < z","a <= b < f < i <= k < l < r <= s < t < u < x <= y","b <= c < d <= h < i < n <= o <= q <= s <= w <= y","c <= d <= e <= f < l <= o < p < q <= r <= s < y","a <= d <= e <= g < k <= o <= r < u <= w < x < z","b <= e < h <= i < l < m < n <= o < q <= s <= w < z","a <= d < g <= h <= j <= m <= q < s <= v <= w < z","e < g < h <= i <= j < l <= o < p <= q < u < v < z","b < d <= e < f < g < h <= k < m <= o < s < w < z","b <= d <= e < m < n <= o <= p < q < s <= v < w < y","c <= d <= f < g <= i <= l < q < r <= s < t <= x","f < g < h < l < n <= p < q <= s < t <= u < w <= z","a <= c < d < i <= l <= n < p < s < u <= v < w <= x","a < c <= e < h <= j <= k < l <= n < o < q < t <= y","b <= c < d < e < f <= j < l <= m <= n <= w <= y","d <= g < h <= i < j <= l <= m < o <= p < s < w < z","a < b <= e <= f < g < l <= n <= o <= r <= t < u","b < c <= d <= f <= h < k <= t < v <= w < x <= z","a < c < d <= e < h < k < l < o <= r <= t < w <= z","b <= c < f < g <= j <= n < q <= s <= t < u < w < y","e < h < i < l <= q < r < s <= t < v <= x < y <= z","a <= c <= d <= f < h < l <= m <= o < p <= q < x","d < f < g < i < j <= k <= m <= n < q <= t < w < x","a <= d <= e < f < k <= l <= n < p < r < u < v <= x","d < e <= i <= k <= m < p < q <= u <= v < w <= x","d <= e < f < i <= j < k <= l < m <= n < r <= v < x","f < h <= j <= n <= p <= r <= s <= t < u < v < w","e < g < h <= i < j <= l < o < q <= r <= s < w <= x","a <= c < d < f <= g <= i <= k <= o <= v < x < y","b <= d <= f <= g < i <= j <= l <= m <= o <= t <= u","a < c <= d <= f < j <= o < p < q <= u <= v < y < z","a < d <= f < h <= k <= l <= n <= t <= u < v <= z","d <= g < i < j < k <= n < q <= t <= w < x <= y < z","c < d < g <= h <= i < k < l <= m < o <= p <= u < z","c < g <= i <= j < n < o <= q < r < t <= v <= w < y","a < c < e < g <= h <= l < o < p < q <= r < w < z","c < d < e <= g < h < k <= n <= q <= t < v <= y < z","a < c < d <= e <= h <= j < k <= p < q <= t <= x","a < f < g <= h < j < n <= o <= p <= q < v < w <= y","a < g < h < j <= m <= r <= s < v <= w <= x <= y","d < e <= g <= h < i <= m <= n < p <= q < s < v < x","a < d < e <= j <= m <= n < p < q <= w < x < y < z","e <= f < h <= n <= p < q < s <= t <= v < x < y < z","a < b < e < h < i <= j < p <= v < w <= x <= y <= z","a < g < h <= i <= j < l <= m < n < r < s < v < w","a < b < c <= d < g < h < i < j < m < s < u < x < y","c <= e <= g < h < i < j <= k <= l < m < t <= v < z"}

    "g"

    "z"

    Returns: "g < z"

  69. {"a < c <= g < n <= o <= p <= r < v <= w <= y <= z","a <= b < c < f < h <= l <= n < p <= q <= x <= y","a <= j <= l <= m <= n <= q < r < s <= u < y < z","c <= g < h < j < m <= n < o < p <= u <= v <= x < z","e < h < i <= m <= n < o <= p < q <= r < v <= w < y","d <= e < i < j < k <= m <= s <= v < x <= y <= z","a < d < e <= g < k < n <= r <= t <= u <= w <= x","a <= b <= c <= i < k < m <= n <= t < u <= v <= z","a <= b <= d < f < k < o < q < s < t <= u < v <= x","c <= d < e < g <= i < j <= k < l <= o < v <= x < z","a <= c < f <= k <= l < t <= u <= v < x < y <= z","b <= f < j <= k <= l < m <= n <= q < t < v < w < x","a <= b < d <= e <= f < g < h <= m < n < p <= r < x","b <= e <= j <= k < l < q <= r <= u <= v <= y < z","d < e <= f < g < i <= j <= q <= s < t < u < y <= z","c <= d < e < f <= i < j <= k < l <= m <= s < w < x","a <= b < f < g < j <= k < l < n < r <= s < v < z","b <= d < g < i < k <= l <= m <= n < p < w < x <= y","a < c <= d <= e < f < g <= h < i < o <= q < v <= w","b <= c <= e < i <= l < m < o < p <= r <= t < v < y","a <= d < e <= i <= j <= k <= n <= p < q < x <= z","a <= b < c <= f < i <= j < n <= o < q <= t < u < y","a <= b <= c <= d < h < i <= m < q < t < u <= v < w","a <= c < e < i < k < m < o <= p < r < w <= x <= z","c <= f < k <= m <= n < o < p < s < t <= u <= v < y","b <= h <= i < j < k <= l <= n <= p < u < w <= x","a <= b < c < e <= o <= p < q < r <= s <= u <= z","e <= h <= j <= l < m <= p < r < s <= u <= w <= y","a < f < j < m < n < p <= q < r < s < t <= v < y","c <= e <= f <= l < m <= n <= o < p < r <= s <= y","g <= n <= o <= p < r < s < t <= u < v < w <= x < z","b < c <= d < h < l < m < n < o <= p < t <= x < y","a < c < g < h < i <= l <= n <= o <= r < t <= v < w","a <= b <= c <= d < e < h < i < o <= p < q <= r < t","g <= h <= i < j < m < n < r <= s < v < w < y < z","f <= g <= j < k <= q < t <= u <= w <= x <= y < z","b <= i <= l <= n < p <= q < u <= v <= w < x <= y","a < f <= g <= j <= m <= o <= t < u <= v <= w <= y","a <= c < f <= i < k < m <= o <= q <= t < v < x < y","b <= c <= g < j <= l <= p <= q <= r <= v <= y < z","a < d <= g < h < i < j <= l <= n <= p < w < x < y","c <= f < i <= k <= l < p < q <= t < w <= x < y < z","c <= d < f < l < n <= p <= q <= s <= u < w < y < z","a <= b <= c <= f <= h <= i < k < m < p < q < w < y","b < e <= g < h < i <= k <= o < p < r < t <= x <= y","c <= d <= i <= j <= l < n <= o < s <= u <= v < z","a < c < f <= g < h <= j <= l < p <= t <= w <= x","a < d < i < j <= l <= m < n <= p <= t <= y <= z","a < b <= d < f < g < j < k < l < p < s < v <= y","a < c < d < e <= m <= p <= q < r <= t <= v < w < z"}

    "x"

    "b"

    Returns: "x > b"

  70. { "a >= b", "b = c", "c > d" }

    "a"

    "d"

    Returns: "a > d"


This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
This problem was used for: