Back
Close

Library dependencies

Statement

 Goal

You are given n_imp lines, each representing a library import in Python style. Then, n_dep lines for the dependencies between libraries. Then, step by step you have to:

(1) Assess if the code will run successfully as it is. If so, print Compiled successfully! and exit.

(2) If the code doesn't run successfully, find where the first* error is located, print the line Import error: tried to import library1 but library2 is required., and finally:

(2.1) If it can be fixed by reordering the imports, find the only order such that at any time, among the possible importable libraries, the smallest (lexicographically) module is chosen.
The format will be, the line: Suggest to change import order:, and then, for each library to import in the suggested order, the line import library (similar to the input imports).

(2.2) If the error is not salvageable return the message Fatal error: interdependencies..

* The imaginary compiler will import the libraries in the order that they are given by the puzzle until it finds one that requires a library that was not previously imported.
Input
Line 1: An integer n_imp for the number of libraries to import.
Next n_imp lines: A Python-like declaration for a library import.
Next line: An integer n_dep for the number of dependency relation between libraries.
Next n_dep lines: A string representing a dependency relation between libraries.

A dependency relation is given in the format:
library requires library1 [, library2, library3 ... ]
Output
The compilation log as defined in the statement, one log message per line.
Constraints
2 ≤ n_imp ≤ 100.
1 ≤ n_dep ≤ 100.
1 ≤ Total amount of dependencies ≤ 200.
Example
Input
3
import A
import B
import C
2
B requires A
C requires B
Output
Compiled successfully!

Tags
Cycle detection, Dependency Graph, Kahn’s algorithm

Difficulty
Easy

Test cases
1. Successful compilation Test
Input
3 import A import B import C 2 B requires A C requires B
Output
Compiled successfully!

1. Successful compilation val Validator
Input
4 import A import D import B import C 3 B requires A C requires B D requires A
Output
Compiled successfully!

2. Fatal error Test
Input
3 import A import B import C 3 B requires A C requires B A requires C
Output
Import error: tried to import A but C is required. Fatal error: interdependencies.

2. Fatal error val Validator
Input
4 import A import B import C import D 4 B requires A C requires B D requires C A requires D
Output
Import error: tried to import A but D is required. Fatal error: interdependencies.

3. Reordering Test
Input
4 import A import C import B import D 2 C requires B, A D requires B
Output
Import error: tried to import C but B is required. Suggest to change import order: import A import B import C import D

3. Reordering val Validator
Input
3 import A import C import B 1 C requires B, A
Output
Import error: tried to import C but B is required. Suggest to change import order: import A import B import C

4. Reordering logic Test
Input
6 import F import A import B import C import E import D 2 B requires E C requires A
Output
Import error: tried to import B but E is required. Suggest to change import order: import A import C import D import E import B import F

4. Reordering logic val Validator
Input
6 import C import E import A import D import F import B 3 B requires E C requires A, D F requires B, C
Output
Import error: tried to import C but A is required. Suggest to change import order: import A import D import C import E import B import F

5. Not lexicographic order but no error Test
Input
3 import C import A import B 1 B requires A
Output
Compiled successfully!

5. Not lexicographic order but no error val Validator
Input
4 import C import A import B import D 2 B requires A D requires B
Output
Compiled successfully!

6. Real fake test 15 libraries 1 Test
Input
15 import requests import itertools import random import functools import inspect import sys import collections import builtins import pandas import unittest import contextlib import os import time import math import numpy 10 math requires requests inspect requires contextlib, os time requires collections, sys contextlib requires sys, os numpy requires os, requests, itertools pandas requires unittest itertools requires random, inspect, contextlib functools requires inspect builtins requires math unittest requires contextlib
Output
Import error: tried to import itertools but random is required. Suggest to change import order: import collections import os import random import requests import math import builtins import sys import contextlib import inspect import functools import itertools import numpy import time import unittest import pandas

6. Real fake test 15 libraries 1 val Validator
Input
15 import sys import inspect import requests import math import itertools import random import contextlib import unittest import collections import builtins import pandas import os import numpy import time import functools 7 sys requires unittest math requires os time requires contextlib random requires os numpy requires contextlib itertools requires sys requests requires math
Output
Import error: tried to import sys but unittest is required. Suggest to change import order: import builtins import collections import contextlib import functools import inspect import numpy import os import math import pandas import random import requests import time import unittest import sys import itertools

7. Real fake test 15 libraries 2 (fatal) Test
Input
15 import sys import pandas import os import unittest import numpy import collections import time import inspect import requests import functools import math import builtins import random import contextlib import itertools 9 math requires functools inspect requires numpy time requires requests random requires itertools functools requires requests collections requires os builtins requires functools requests requires time unittest requires numpy
Output
Import error: tried to import unittest but numpy is required. Fatal error: interdependencies.

7. Real fake test 15 libraries 2 (fatal) val Validator
Input
15 import builtins import numpy import os import contextlib import inspect import random import requests import math import unittest import time import collections import functools import itertools import pandas import sys 7 sys requires random numpy requires requests pandas requires unittest itertools requires builtins builtins requires sys requests requires sys unittest requires pandas
Output
Import error: tried to import builtins but sys is required. Fatal error: interdependencies.

8. Real fake test 15 libraries 3 (compiles) Test
Input
15 import collections import os import random import requests import math import builtins import sys import contextlib import inspect import functools import itertools import numpy import time import unittest import pandas 10 math requires requests inspect requires contextlib, os time requires collections, sys contextlib requires sys, os numpy requires os, requests, itertools pandas requires unittest itertools requires random, inspect, contextlib functools requires inspect builtins requires math unittest requires contextlib
Output
Compiled successfully!

8. Real fake test 15 libraries 3 (compiles) val Validator
Input
15 import builtins import collections import contextlib import functools import inspect import numpy import os import math import pandas import random import requests import time import unittest import sys import itertools 7 sys requires unittest math requires os time requires contextlib random requires os numpy requires contextlib itertools requires sys requests requires math
Output
Compiled successfully!

9. 40 libraries Test
Input
40 import T import S import W import E import L import BF import I import BB import O import U import M import BA import BJ import BH import K import BK import N import C import BN import D import BE import BL import P import Z import R import J import A import H import F import BC import V import Q import Y import BM import B import BD import BI import G import BG import X 24 A requires N, Q C requires W, Y D requires BN, H, BE E requires BE, L, BF F requires L G requires BG, A H requires BC, Y I requires F, V J requires BJ, BH, G K requires X, BN, A M requires BB, BA N requires BA O requires J Q requires BH V requires BK, L W requires BA, X X requires P, BH Y requires U, J, G Z requires P BB requires Z, D, BF BD requires P, B BI requires X, I BL requires A, G, BE BM requires N
Output
Import error: tried to import W but BA is required. Suggest to change import order: import B import BA import BC import BE import BF import BG import BH import BJ import BK import BN import L import E import F import N import BM import P import BD import Q import A import G import BL import J import O import R import S import T import U import V import I import X import BI import K import W import Y import C import H import D import Z import BB import M

9. 40 libraries val Validator
Input
40 import X import BG import BD import Y import T import K import BH import J import Q import E import V import Z import N import B import BM import BC import W import BA import D import BL import A import G import BK import BI import BF import BE import F import L import BB import BN import M import I import P import C import R import H import O import BJ import S import U 31 A requires BC, BH B requires L, BD, X C requires BI D requires V, Q, K E requires Y F requires BL, L G requires K H requires P I requires L K requires W, I, E M requires BI, U O requires M, Y Q requires BE, BJ, BL T requires H, BI U requires BI, I X requires BN, O Y requires BH Z requires A, D BA requires L BB requires BC, B, Y BC requires D, X BD requires X, D BF requires L BG requires O, J BH requires H BI requires J, H, BF BJ requires M, E BK requires BC, BM BL requires U BM requires O BN requires U, F
Output
Import error: tried to import X but BN is required. Suggest to change import order: import BE import J import L import BA import BF import I import N import P import H import BH import BI import C import R import S import T import U import BL import F import BN import M import V import W import Y import E import BJ import K import G import O import BG import BM import Q import D import X import BC import A import BD import B import BB import BK import Z

10. Max size in codingame Test
Input
93 import BV import BE import Q import X import CW import DF import BJ import H import CS import BS import BG import BW import D import CF import U import DD import CC import BO import BR import BY import CJ import F import DH import R import CT import BH import CX import CY import BM import DC import DM import BU import CN import DA import M import O import BF import CU import CQ import CE import BK import DK import V import CA import BX import CH import W import CI import C import CZ import K import CV import CK import S import BI import CR import BA import J import DJ import L import DB import BP import N import CD import BT import CM import BQ import I import Z import E import DO import B import CL import DL import G import P import BB import DI import BN import CG import DE import Y import BD import DG import CP import T import DN import CB import BC import BZ import BL import A import CO 66 A requires BW, Z, CA B requires BD C requires DD, BM, CL D requires CV, DJ, BD G requires BO H requires B I requires DC, F, BH J requires DI, A K requires DB, E, CY L requires CM M requires DD, BT, DL O requires DM, Q P requires L, BD, BT Q requires L, CU, CO R requires BI, CW S requires DK, BN T requires BI, F, CC U requires BH, T, BZ V requires DI, Q W requires BT, CT, DB X requires CD, BO, BM Z requires BY, CS BA requires BB BB requires CH, L BC requires CO, BV BG requires CI, CA BH requires DG, BB BI requires BJ BJ requires CK, BH, CQ BK requires BW, CI, DL BL requires Y, DE BN requires DF, CI, Y BO requires CE BP requires CI BQ requires CA, CT BS requires CU BU requires BR, Z, CD CA requires E, BZ CB requires BD, E, Q CC requires CM CD requires BH, A CF requires DO, BJ CG requires O, BX, BO CH requires J CL requires BA, Z, D CM requires DD, DE, CJ CN requires BH CO requires BR CQ requires O CR requires BV, DE, DA CT requires Z CU requires BV CV requires DM CW requires CA CY requires DI, BX, Z CZ requires DO, CU, F DB requires BU, CZ, R DD requires BZ DE requires N, CW DF requires M, BF DG requires CU, DK, DM DH requires DN, BK DI requires Z DJ requires CF, W DK requires F, CE, BE DO requires CQ
Output
Import error: tried to import Q but L is required. Suggest to change import order: import BD import B import BE import BF import BM import BR import BT import BV import BW import BX import BY import BZ import CE import BO import CI import BP import CJ import CK import CO import BC import CP import CS import CU import BS import CX import DA import DC import DD import DL import BK import DM import CV import DN import DH import E import CA import BG import CW import F import DK import DG import G import H import M import DF import N import DE import CM import CC import CR import L import P import Q import CB import O import CG import CQ import DO import CZ import Y import BL import BN import S import Z import A import CT import BQ import DI import CY import J import CH import BB import BA import BH import BJ import BI import CD import BU import CF import CN import I import R import DB import K import T import U import V import W import DJ import D import CL import C import X

10. Max size in codingame val Validator
Input
93 import G import DL import BN import H import Z import DM import D import BO import S import BX import BK import CS import J import DG import DF import BA import CZ import O import BQ import C import BM import BW import P import CR import DC import K import CV import CH import N import DA import CC import M import BY import R import BU import DH import CP import E import BD import CN import BS import CF import CW import Q import DI import BF import DJ import CD import BG import CE import BP import CM import U import BL import CL import BE import DD import CX import CT import CY import BV import CJ import CI import BJ import Y import BH import X import L import CO import DB import B import BZ import DO import BC import T import I import DN import CG import CA import BR import BB import CU import A import CK import CQ import BI import V import DE import DK import BT import W import CB import F 71 A requires CN B requires DG, CT E requires BX, J F requires BT G requires L, CS, BE H requires CV, CF, DJ I requires BE M requires D, BX, A O requires DC P requires DM, DI Q requires DI, BH, O R requires DA U requires BK V requires C W requires CY X requires BM, BW, O Y requires CZ, CY, J Z requires BO, CU BA requires CS, BC BB requires BU, DO BD requires CQ BF requires K, X, Z BG requires BH, F, BP BI requires DL, DM, X BJ requires CB, O, CP BK requires CJ, DL, CN BM requires DC BN requires DD BO requires BX, CN, BD BQ requires CP, DF, CK BR requires DD BT requires DO, U, Y BU requires CI, BS BV requires DM BX requires D, CH, BS BY requires DG BZ requires CB CA requires W CC requires CD, Y CD requires CF CE requires CX CF requires DD, CU CG requires BX CH requires CB, DJ CI requires X, BS CL requires BL, BU CM requires DC, BD, BN CN requires DE CO requires CY, BN, BW CP requires CY, BZ CR requires CN, Q, R CS requires M, DB, DC CT requires BF CU requires A, S CV requires G, BK CW requires CA CX requires K, BD CZ requires CG DA requires CL, BF, CB DC requires CG DD requires DL, BG, BU DE requires CA, S DF requires N DG requires BC, BL DH requires L DI requires D, BL, CL DJ requires CK, I DK requires DB, CV, H DL requires W, BU DM requires CF DO requires C
Output
Import error: tried to import G but L is required. Suggest to change import order: import BC import BE import BH import BL import BP import BS import BW import C import CB import BZ import CJ import CK import CQ import BD import CY import CP import D import DB import DG import BY import DN import DO import I import DJ import CH import BX import CG import CZ import DC import BM import J import E import K import CX import CE import L import DH import N import DF import BQ import O import BJ import S import T import V import W import CA import CW import DE import CN import A import BO import CU import M import CS import BA import G import X import CI import BU import BB import CL import DI import DL import BK import CV import Q import U import Y import BT import F import BG import DD import BN import BR import CF import CD import CC import CM import CO import DM import BI import BV import H import DK import P import Z import BF import CT import B import DA import R import CR

11. Extra 1 Test
Input
10 import J import H import D import A import I import C import B import F import G import E 5 A requires F, J, E D requires H E requires J, F G requires A, I, H J requires H, G
Output
Import error: tried to import J but H is required. Fatal error: interdependencies.

11. Extra 1 val Validator
Input
10 import JJ import HH import DD import AA import II import CC import BB import FF import GG import EE 5 AA requires FF, JJ, EE DD requires HH EE requires JJ, FF GG requires AA, II, HH JJ requires HH, GG
Output
Import error: tried to import JJ but HH is required. Fatal error: interdependencies.

12. Extra 2 Test
Input
10 import I import A import D import C import G import H import B import F import E import J 9 A requires H B requires G C requires D D requires J E requires I, G G requires I, F H requires J I requires F J requires I
Output
Import error: tried to import I but F is required. Suggest to change import order: import F import I import G import B import E import J import D import C import H import A

12. Extra 2 val Validator
Input
10 import II import AA import DD import CC import GG import HH import BB import FF import EE import JJ 9 AA requires HH BB requires GG CC requires DD DD requires JJ EE requires II, GG GG requires II, FF HH requires JJ II requires FF JJ requires II
Output
Import error: tried to import II but FF is required. Suggest to change import order: import FF import II import GG import BB import EE import JJ import DD import CC import HH import AA

Solution language

Solution

Stub generator input