fork download
  1. import kotlin.math.min
  2. import kotlin.math.max
  3. import kotlin.math.sqrt
  4. import kotlin.math.abs
  5.  
  6. private fun cin_ch() = readLine()!!.split(" ").map{it.toInt()}
  7. private fun cin_array() = readLine()!!.split(" ").map(String::toLong)
  8. private fun cin_string() = readLine()!!.split(" ")
  9.  
  10. fun main() {
  11. var n = cin_ch()[0];
  12. val MyArray = ArrayList<String> ();
  13. val MiArray = ArrayList<Int> ();
  14. var x = 2 * n - 2;
  15. var x1 : String = "";
  16. var x2 : String = "";
  17. var ans1 : String = "";
  18. var ans2 : String = "";
  19. var cur1 : String = "";
  20. var cur2 : String = "";
  21. var ii : Int = 0;
  22. for (i in 0..n)
  23. MiArray.add(0);
  24. while (x > 0) {
  25. var ss = cin_string()[0];
  26. if (ss.count() == n - 1) {
  27. if (x1.count() == 0) x1 = ss;
  28. else x2 = ss;
  29. }
  30. if (MiArray[ss.count() - 1] == 0) MiArray[ss.count() - 1] = ii + 1;
  31. MyArray.add(ss)
  32. ii = ii + 1
  33. x = x - 1;
  34. }
  35. cur1 = x1 + x2[n - 2];
  36. var kol1 : Int = 0;
  37. var kol2 : Int = 0;
  38. for (i in 0..2 * n - 3) {
  39. var uu = MyArray[i];
  40. if (cur1.substring(0,uu.count()) == uu) {
  41. if (MiArray[uu.count() - 1] - 1 != i && ans1[MiArray[uu.count() - 1] - 1] == 'P') ans1+='S';
  42. else
  43. ans1+='P';
  44. }
  45. else if (cur1.substring(n - uu.count(),n) == uu) {
  46. ans1+='S';
  47. }
  48. else {kol1 = 1;break;}
  49. }
  50. if (kol1 == 0) {
  51. println(ans1);
  52. return;}
  53. cur2 = x2 + x1[n - 2];
  54. for (i in 0..2 * n - 3) {
  55. var uu = MyArray[i];
  56. if (cur2.substring(0,uu.count()) == uu) {
  57. if (MiArray[uu.count() - 1] - 1 != i && ans2[MiArray[uu.count() - 1] - 1] == 'P') ans2+='S';
  58. else
  59. ans2+='P';
  60. }
  61. else {
  62. ans2+='S';
  63. }
  64. }
  65. println(ans2);
  66. return;
  67. }
Success #stdin #stdout 0.09s 39404KB
stdin
5
ba
a
abab
a
aba
baba
ab
aba
stdout
SPPSPSPS