fork download
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. class Stack<T> {
  5. private LinkedList<T> storage = new LinkedList<T>();
  6. public void push(T v) {storage.addFirst(v);}
  7. public T peek() {return storage.getFirst();}
  8. public T pop() {return storage.removeFirst();}
  9. public boolean isEmpty() {return storage.isEmpty();}
  10. public String toString() {return storage.toString();}
  11. }
  12.  
  13. public class Main
  14. {
  15. static int[][] a = new int[128][128];
  16. static boolean[] used = new boolean[128];
  17. static boolean[] exist = new boolean[128];
  18.  
  19. static Stack<Character> q = new Stack<Character>();
  20.  
  21. static Scanner sc = new Scanner(System.in);
  22. static PrintWriter pw = new PrintWriter(System.out);
  23.  
  24. /*
  25.   * function for search in s1 and s2 first different characters
  26.   * if s1 equals s2 then return -1
  27.   * else first different character index
  28.   */
  29. static int strcmp(String s1, String s2) {
  30.  
  31. for(int i = 0; i < Math.min(s1.length(), s2.length()); i++)
  32. if(s1.charAt(i) != s2.charAt(i)) {
  33. return i;
  34. }
  35.  
  36. return -1;
  37. }
  38.  
  39. static void dfs(int v) {
  40. used[v] = true;
  41. for(int i = 0; i < 128; i++)
  42. if (a[v][i] == 1 && !used[i]) {
  43. dfs(i);
  44. }
  45. q.push((char)v);
  46. }
  47.  
  48. static void topSort() {
  49. for(int i = 127; i >= 0; i--)
  50. {
  51. boolean flag = false;
  52. for(int j = 0; j < 128; j++)
  53. if(a[i][j] == 1)
  54. flag = true;
  55. if(!used[i] && flag)
  56. dfs(i);
  57. }
  58. }
  59.  
  60.  
  61.  
  62. public static void main(String[] args) throws IOException {
  63.  
  64. try
  65. {
  66. String s1,s2;
  67. s1 = sc.nextLine();
  68.  
  69. do {
  70.  
  71. s2 = sc.nextLine();
  72. if(s2.equals("#"))
  73. break;
  74. int i = strcmp(s1,s2);
  75.  
  76. if(i != -1)
  77. a[s1.charAt(i - 1)][s2.charAt(i - 1)] = 1;
  78.  
  79. s1 = s2;
  80.  
  81. } while(!s1.equals("#"));
  82.  
  83.  
  84. topSort();
  85.  
  86. while(!q.isEmpty()) {
  87. pw.print(q.pop());
  88. }
  89.  
  90. }
  91. finally
  92. {
  93. pw.close();
  94. }
  95. }
  96.  
  97. }
Runtime error #stdin #stdout 0.1s 212864KB
stdin
XWY
ZX
ZXY
ZXW
YWWX
#
stdout
Standard output is empty