Rachel is submitting assignment from every student. She has given them a few minutes to arrange their assignments before submission. Just then Rahul remembers that his assignment is with Rohan. Rohan has to pass the assignment to Rahul. All the students are sitting in a straight line. He cannot pass the assignment in front of the teacher because then she will assume they have copied the assignment and will punish both of them. We have to help Rohan to find a way to pass the assignment to Rahul in such a way that he is not caught.

Assignment can be passed under some restrictions as given below:

- A student can pass the assignment only to his immediate neighbor i.e i-1 and i+1
- At any given time a student may pass the assignment to other student, accept the assignment from some other student or may keep the assignment to himself.
- Teacher is keeping watch over students from to including both and
- If a student is being watched he cannot pass the note or accept the note, otherwise he is caught.
- If he keeps the assignment and he is being watched, he is not caught.

Given four inputs n, m, s, f where n is the total number of students, m is the number of steps during which teacher keeps vigil over students from to , s is the position of Rohan and f is the position of Rahul.

Each m query contains three inputs: The time at which she is watching, the leftmost child she is watching and the rightmost child she is watching.

We have to output a sequence of three words: and denoting the passing direction of current student.

Examples:

Input: n = 4, m = 4, s = 3, f = 4 1 2 4 2 1 2 3 3 4 4 2 3 Output: KeepRight During time = 1, teacher is watching all the student from 2 to 4. Student 3 who has the assignment therefore cannot pass it to his neighbor, thus he keeps the assignment. During time = 2, teacher is watching student 1 and 2, therefore student 3 can pass the assignment to his right to student 4. Since student 4 is Rahul therefore our answer is"KeepRight"Input: n = 10, m = 1, s = 1, f = 10 1 5 6 Output: RightRightRightRightRightRight RightRightRightRight During time = 1, teacher is watching student 5 and 6 therefore student 1 can easily pass the assignment to his right to student 2. After this teacher stops watching any student therefore they can keep on passing the assignment to their right until the assignment reaches Rahul. Therefore the answer is"RightRightRightRightRightRight RightRightRightRight"

**Approach:**

At a given moment if the teacher is watching either the student currently holding the assignment or the student to whom the assignment is to be passed, then the student will keep it to himself else he will pass the assignment to his neighbor sitting towards Rahul.

Below is the implementation:

## C++

`// CPP program to find the way ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `void` `solve(` `int` `n, ` `int` `m, ` `int` `s, ` `int` `f, ` ` ` `long` `t[], ` `int` `l[], ` `int` `r[]) ` `{ ` ` ` ` ` `int` `dir; ` ` ` `string val; ` ` ` ` ` `// If Rahul sits to right of Rohan ` ` ` `// then student will either pass ` ` ` `// it right or keep it to himself ` ` ` `if` `(s < f) { ` ` ` `dir = 1; ` ` ` `val = ` `"Right"` `; ` ` ` `} ` ` ` ` ` `// If Rahul sits to left of Rohan ` ` ` `// then student will either pass ` ` ` `// it left or keep it to himself ` ` ` `else` `{ ` ` ` `dir = -1; ` ` ` `val = ` `"Left"` `; ` ` ` `} ` ` ` `string ans = ` `""` `; ` ` ` ` ` `// current is keeping track of ` ` ` `// the position of assignment ` ` ` `// at a given time ` ` ` `int` `i = 0, current = s; ` ` ` ` ` `// tim variable keeping track of ` ` ` `// current time ` ` ` `long` `tim = 1; ` ` ` `while` `(1) { ` ` ` ` ` `// If time duration of query ` ` ` `// matches with the current time ` ` ` `if` `(i < m && tim == t[i]) { ` ` ` ` ` `// If teacher is watching the ` ` ` `// student having the assignment ` ` ` `// or the student to whom the ` ` ` `// assignment is to be passed ` ` ` `// then the student keeps it to ` ` ` `// itself ` ` ` `if` `((current >= l[i] && current <= r[i]) || ` ` ` `(current + dir >= l[i] && current + dir ` ` ` `<= r[i])) { ` ` ` `ans += ` `"Keep"` `; ` ` ` `tim++; ` ` ` `i++; ` ` ` `continue` `; ` ` ` `} ` ` ` `i++; ` ` ` `} ` ` ` ` ` `// If the students are safe then student ` ` ` `// passes the assignment to his neighbor ` ` ` `current += dir; ` ` ` `ans += val; ` ` ` `tim++; ` ` ` ` ` `// If the assignment has reached Rahul ` ` ` `// then we break the loop ` ` ` `if` `(current == f) ` ` ` `break` `; ` ` ` `} ` ` ` ` ` `cout << ans << endl; ` `} ` ` ` `// Driver function for the program ` `int` `main() ` `{ ` ` ` `int` `n = 4, m = 4, s = 3, f = 4; ` ` ` ` ` `// matrix saving time for each query ` ` ` `long` `t[m + 2] = { 1, 2, 3, 4 }; ` ` ` ` ` `// matrix saving leftmost child being ` ` ` `// watched for each query ` ` ` `int` `l[m + 2] = { 2, 1, 3, 2 }; ` ` ` ` ` `// matrix saving rightmost child ` ` ` `// being watched for each query ` ` ` `int` `r[m + 2] = { 4, 2, 4, 3 }; ` ` ` ` ` `solve(n, m, s, f, t, l, r); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java progam to find the way ` `import` `java.io.*; ` ` ` `class` `Hiding { ` ` ` `static` `void` `solve(` `int` `n, ` `int` `m, ` `int` `s, ` `int` `f, ` ` ` `long` `t[], ` `int` `l[], ` `int` `r[]) ` ` ` `{ ` ` ` `int` `dir; ` ` ` `String val; ` ` ` ` ` `// If Rahul sits to right of Rohan ` ` ` `// then student will either pass it ` ` ` `// right or keep it to himself ` ` ` `if` `(s < f) { ` ` ` `dir = ` `1` `; ` ` ` `val = ` `"Right"` `; ` ` ` `} ` ` ` ` ` `// If Rahul sits to left of Rohan then ` ` ` `// student will either pass it left ` ` ` `// or keep it to himself ` ` ` `else` `{ ` ` ` `dir = -` `1` `; ` ` ` `val = ` `"Left"` `; ` ` ` `} ` ` ` ` ` `String ans = ` `""` `; ` ` ` `int` `i = ` `0` `, current = s; ` ` ` ` ` `// Variable keeping track of current time ` ` ` `long` `tim = ` `1` `; ` ` ` `while` `(` `1` `> ` `0` `) { ` ` ` ` ` `// If time duration of query ` ` ` `// matches with the current time ` ` ` `if` `(i < m && tim == t[i]) { ` ` ` ` ` `// If teacher is watching the student ` ` ` `// having the assignment or the ` ` ` `// student to whom the assignment is ` ` ` `// to be passed then the student ` ` ` `// keeps it to itself ` ` ` `if` `((current >= l[i] && current <= r[i]) || ` ` ` `(current + dir >= l[i] && current + dir ` ` ` `<= r[i])) { ` ` ` `ans += ` `"Keep"` `; ` ` ` `tim++; ` ` ` `i++; ` ` ` `continue` `; ` ` ` `} ` ` ` `i++; ` ` ` `} ` ` ` ` ` `// If the students are safe then student ` ` ` `// passes the assignment to his neighbor ` ` ` `current += dir; ` ` ` `ans += val; ` ` ` `tim++; ` ` ` ` ` `// If the assignment has reached Rahul ` ` ` `// then we break the loop ` ` ` `if` `(current == f) ` ` ` `break` `; ` ` ` `} ` ` ` `System.out.println(ans); ` ` ` `} ` ` ` ` ` `// Driver Program ` ` ` `public` `static` `void` `main(String args[]) ` ` ` `{ ` ` ` `int` `n = ` `4` `, m = ` `4` `, s = ` `3` `, f = ` `4` `; ` ` ` ` ` `// matrix saving time for each query ` ` ` `long` `t[] = { ` `1` `, ` `2` `, ` `3` `, ` `4` `}; ` ` ` ` ` `// matrix saving leftmost child ` ` ` `// being watched ` ` ` `int` `l[] = { ` `2` `, ` `1` `, ` `3` `, ` `2` `}; ` ` ` ` ` `// matrix saving rightmost child ` ` ` `// being watched ` ` ` `int` `r[] = { ` `4` `, ` `2` `, ` `4` `, ` `3` `}; ` ` ` ` ` `solve(n, m, s, f, t, l, r); ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

## Python3

`# Python program to find the way ` ` ` `def` `solve(n, m, s, f, t, l, r): ` ` ` `val ` `=` `""; ` ` ` ` ` `# If Rahul sits to right of Rohan ` ` ` `# then student will either pass it ` ` ` `# right or keep it to himself ` ` ` `if` `(s < f): ` ` ` `dir` `=` `1` `; ` ` ` `val ` `=` `"Right"` `; ` ` ` ` ` `# If Rahul sits to left of Rohan then ` ` ` `# student will either pass it left ` ` ` `# or keep it to himself ` ` ` `else` `: ` ` ` `dir` `=` `-` `1` `; ` ` ` `val ` `=` `"Left"` `; ` ` ` ` ` `ans ` `=` `""; ` ` ` `i ` `=` `0` `; ` ` ` `current ` `=` `s; ` ` ` ` ` `# Variable keeping track of current time ` ` ` `tim ` `=` `1` `; ` ` ` `while` `(` `1` `> ` `0` `): ` ` ` ` ` `# If time duration of query ` ` ` `# matches with the current time ` ` ` `if` `(i < m ` `and` `tim ` `=` `=` `t[i]): ` ` ` ` ` `# If teacher is watching the student ` ` ` `# having the assignment or the ` ` ` `# student to whom the assignment is ` ` ` `# to be passed then the student ` ` ` `# keeps it to itself ` ` ` `if` `((current >` `=` `l[i] ` `and` `current <` `=` `r[i]) ` `or` `\ ` ` ` `(current ` `+` `dir` `>` `=` `l[i] ` `and` `current ` `+` `dir` `<` `=` `r[i])): ` ` ` `ans ` `+` `=` `"Keep"` `; ` ` ` `tim ` `+` `=` `1` `; ` ` ` `i ` `+` `=` `1` `; ` ` ` `continue` `; ` ` ` ` ` `i ` `+` `=` `1` `; ` ` ` ` ` `# If the students are safe then student ` ` ` `# passes the assignment to his neighbor ` ` ` `current ` `+` `=` `dir` `; ` ` ` `ans ` `+` `=` `val; ` ` ` `tim ` `+` `=` `1` `; ` ` ` ` ` `# If the assignment has reached Rahul ` ` ` `# then we break the loop ` ` ` `if` `(current ` `=` `=` `f): ` ` ` `break` `; ` ` ` ` ` `print` `(ans); ` ` ` `# Driver Program ` `if` `__name__ ` `=` `=` `'__main__'` `: ` ` ` `n, m, s, f ` `=` `4` `, ` `4` `, ` `3` `, ` `4` `; ` ` ` ` ` `# matrix saving time for each query ` ` ` `t ` `=` `[ ` `1` `, ` `2` `, ` `3` `, ` `4` `]; ` ` ` ` ` `# matrix saving leftmost child ` ` ` `# being watched ` ` ` `l ` `=` `[ ` `2` `, ` `1` `, ` `3` `, ` `2` `]; ` ` ` ` ` `# matrix saving rightmost child ` ` ` `# being watched ` ` ` `r ` `=` `[ ` `4` `, ` `2` `, ` `4` `, ` `3` `]; ` ` ` ` ` `solve(n, m, s, f, t, l, r); ` ` ` `# This code is contributed by 29AjayKumar ` |

*chevron_right*

*filter_none*

## C#

`// C# progam to find the way ` `using` `System; ` ` ` `class` `Hiding ` `{ ` ` ` `static` `void` `solve(` `int` `n, ` `int` `m, ` `int` `s, ` `int` `f, ` ` ` `long` `[]t, ` `int` `[]l, ` `int` `[]r) ` ` ` `{ ` ` ` `int` `dir; ` ` ` `String val; ` ` ` ` ` `// If Rahul sits to right of Rohan ` ` ` `// then student will either pass it ` ` ` `// right or keep it to himself ` ` ` `if` `(s < f) { ` ` ` `dir = 1; ` ` ` `val = ` `"Right"` `; ` ` ` `} ` ` ` ` ` `// If Rahul sits to left of Rohan then ` ` ` `// student will either pass it left ` ` ` `// or keep it to himself ` ` ` `else` `{ ` ` ` `dir = -1; ` ` ` `val = ` `"Left"` `; ` ` ` `} ` ` ` ` ` `String ans = ` `""` `; ` ` ` `int` `i = 0, current = s; ` ` ` ` ` `// Variable keeping track of current time ` ` ` `long` `tim = 1; ` ` ` `while` `(1 > 0) { ` ` ` ` ` `// If time duration of query ` ` ` `// matches with the current time ` ` ` `if` `(i < m && tim == t[i]) { ` ` ` ` ` `// If teacher is watching the student ` ` ` `// having the assignment or the ` ` ` `// student to whom the assignment is ` ` ` `// to be passed then the student ` ` ` `// keeps it to itself ` ` ` `if` `((current >= l[i] && current <= r[i]) || ` ` ` `(current + dir >= l[i] && current + ` ` ` `dir <= r[i])) ` ` ` `{ ` ` ` `ans += ` `"Keep"` `; ` ` ` `tim++; ` ` ` `i++; ` ` ` `continue` `; ` ` ` `} ` ` ` `i++; ` ` ` `} ` ` ` ` ` `// If the students are safe then student ` ` ` `// passes the assignment to his neighbor ` ` ` `current += dir; ` ` ` `ans += val; ` ` ` `tim++; ` ` ` ` ` `// If the assignment has reached Rahul ` ` ` `// then we break the loop ` ` ` `if` `(current == f) ` ` ` `break` `; ` ` ` `} ` ` ` `Console.Write(ans); ` ` ` `} ` ` ` ` ` `// Driver Program ` ` ` `public` `static` `void` `Main() ` ` ` `{ ` ` ` `int` `n = 4, m = 4, s = 3, f = 4; ` ` ` ` ` `// matrix saving time for each query ` ` ` `long` `[]t = { 1, 2, 3, 4 }; ` ` ` ` ` `// matrix saving leftmost ` ` ` `// child being watched ` ` ` `int` `[]l = { 2, 1, 3, 2 }; ` ` ` ` ` `// matrix saving rightmost ` ` ` `// child being watched ` ` ` `int` `[]r = { 4, 2, 4, 3 }; ` ` ` ` ` `solve(n, m, s, f, t, l, r); ` ` ` `} ` `} ` ` ` `// This code is contributed by nitin mittal ` |

*chevron_right*

*filter_none*

**Output:**

KeepRight

## Recommended Posts:

- Different ways for passing data to view in Laravel
- Differences between Dynamic Binding and Message Passing in Java
- Puzzle | 1000 light bulbs switched on/off by 1000 persons passing by
- Find relative rank of each element in array
- Find the pair (a, b) with minimum LCM such that their sum is equal to N
- Count all possible unique sum of series K, K+1, K+2, K+3, K+4, ..., K+N
- Perform range sum queries on string as per given condition
- Construct an Array of Strings having Longest Common Prefix specified by the given Array
- Count of Distinct Substrings occurring consecutively in a given String
- Sum of bit differences for numbers from 0 to N | Set 2
- Bitwise operations on Subarrays of size K
- Competitive Programming vs Software Development - Where Should I Invest My Time?
- Queries to find the Minimum Weight from a Subtree of atmost D-distant Nodes from Node X
- Travelling Salesman Problem | Greedy Approach

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.