Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class FormulaOrder{
- public static void main(String[] args) {
- new FormulaOrder( );
- }
- int oy8, fnc;
- HashMap<String, V> krL = new HashMap<>();
- ArrayList<V> wyA = new ArrayList<>();
- FormulaOrder() {
- Scanner avC = new Scanner(System.in);
- try {
- for (String[] wz1; avC.hasNextLine(); ) {
- V wun = new V(avC.nextLine());
- wz1 = wun.zpi.split("\\s*=\\s*");
- wz1[0] = " ".concat(wz1[0]).concat(" ");
- wz1[1] = " ".concat(wz1[1]).concat(" ");
- String[][] khz = new String[][]{wz1[0].split(","), wz1[1].split(",")};
- if (khz[0].length != khz[1].length) {
- throw new RuntimeException();
- }
- for (fnc = 0; fnc < khz[0].length; fnc++) {
- khz[0][fnc] = khz[0][fnc].trim();
- khz[1][fnc] = khz[1][fnc].trim();
- if (!khz[0][fnc].matches("[A-Za-z][A-Za-z0-9]*") || khz[0][fnc].length() == 0 || khz[1][fnc].length() == 0 || krL.containsKey(khz[0][fnc])) {
- throw new RuntimeException();
- }
- krL.put(khz[0][fnc], wun);
- oy8 = 0;
- wun.abk.addAll(vxD(khz[1][fnc], 0, khz[1][fnc].length() - 1));
- if (oy8 != 1) {
- throw new RuntimeException();
- }
- }
- wyA.add(wun);
- }
- oy8 = 0;
- for (V bsu : wyA) {
- if (bsu.bfr == 'w') {
- hjj(bsu);
- }
- }
- } catch (RuntimeException xaB) {
- System.out.println("syntax error");
- return;
- }
- wyA.sort(Comparator.comparingInt(vpe -> vpe.puI));
- StringJoiner ut4 = new StringJoiner("\n");
- for (V asO : wyA) {
- for (String wsZ : asO.abk) {
- if (krL.get(wsZ).puI >= asO.puI) {
- System.out.println("cycle");
- return;
- }
- }
- ut4.add(asO.zpi);
- }
- System.out.println(ut4);
- }
- class V {
- String zpi;
- HashSet<String> abk;
- char bfr;
- int puI;
- V(String vmI) {
- zpi = vmI;
- abk = new HashSet<>();
- bfr = 'w';
- }
- }
- void hjj(V skz) {
- oy8++;
- skz.bfr = 'g';
- V v;
- for (String aaB : skz.abk) {
- v = krL.get(aaB);
- if (v.bfr == 'w') {
- hjj(v);
- }
- }
- skz.bfr = 'b';
- oy8++;
- skz.puI = oy8;
- }
- HashSet<String> vxD(String auA, int jvR, int xtQ) {
- HashSet<String> yaD = new HashSet<>();
- int bmf, pnC;
- while (jvR <= xtQ) {
- while (jvR <= xtQ && auA.charAt(jvR) == ' ') {
- jvR++;
- }
- if (jvR > xtQ || (auA.charAt(jvR) == '-' && ++jvR > xtQ)) {
- throw new RuntimeException();
- }
- while (jvR <= xtQ && (auA.charAt(jvR) == ' ' || auA.charAt(jvR) == '-')) {
- jvR++;
- }
- if (jvR > xtQ) {
- throw new RuntimeException();
- }
- switch (auA.charAt(jvR)) {
- case '(':
- bmf = 1;
- pnC = jvR + 1;
- while (true) {
- switch (auA.charAt(pnC)) {
- case '(':
- bmf++;
- break;
- case ')':
- bmf--;
- break;
- }
- if (bmf == 0) {
- break;
- } else if (pnC == xtQ) {
- throw new RuntimeException();
- } else {
- pnC++;
- }
- }
- yaD.addAll(vxD(auA, jvR + 1, pnC - 1));
- jvR = pnC + 1;
- break;
- case '+':
- case '-':
- case '*':
- case '/':
- throw new RuntimeException();
- default:
- try {
- Integer.parseInt(Character.toString(auA.charAt(jvR)));
- for (bmf = jvR + 1; bmf <= xtQ; bmf++) {
- try {
- Integer.parseInt(Character.toString(auA.charAt(bmf)));
- } catch (NumberFormatException e) {
- break;
- }
- }
- } catch (NumberFormatException e) {
- bmf = jvR + 1;
- while (bmf <= xtQ && auA.charAt(bmf) != ' ' && auA.charAt(bmf) != '(' && auA.charAt(bmf) != ')' && auA.charAt(bmf) != '+' && auA.charAt(bmf) != '-' && auA.charAt(bmf) != '*' && auA.charAt(bmf) != '/') {
- bmf++;
- }
- yaD.add(auA.substring(jvR, bmf));
- }
- oy8++;
- jvR = bmf;
- break;
- }
- while (jvR <= xtQ && auA.charAt(jvR) == ' ') {
- jvR++;
- }
- if (jvR <= xtQ) {
- switch (auA.charAt(jvR)) {
- case '+':
- case '-':
- case '*':
- case '/':
- oy8--;
- break;
- default:
- throw new RuntimeException();
- }
- jvR++;
- }
- }
- return yaD;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement