# Check if it is possible to move from (0, 0) to (x, y) in N steps

Given a point (x, y). Find whether it is possible or not to move from (0, 0) to (x, y) in exactly n steps. 4 types of steps are valid, you can move from a point (a, b) to either of (a, b+1), (a, b-1), (a-1, b), (a+1, b)

Examples:

```Input: x = 0, y = 0, n = 2
Output: POSSIBLE

Input: x = 1, y = 1, n = 3
Output: IMPOSSIBLE
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach :

In the shortest path, one can move from (0, 0) to (x, y) in |x| + |y|. So, it is not possible to move from (0, 0) to (x, y) in less than |x| + |y| steps. After reaching one can take two more steps as (x, y) -> (x, y+1) -> (x, y).

So, it is possible if

n >= |x| + |y| and ( n-( |x| + |y| ) ) % 2 = 0.

Below is the implementation of the above approach:

 `// CPP program to check whether it is possible ` `// or not to move from (0, 0) to (x, y) ` `// in exactly n steps ` `#include ` `using` `namespace` `std; ` ` `  `// Function to check whether it is possible ` `// or not to move from (0, 0) to (x, y) ` `// in exactly n steps ` `bool` `Arrive(``int` `a, ``int` `b, ``int` `n) ` `{ ` `    ``if` `(n >= ``abs``(a) + ``abs``(b) and (n - (``abs``(a) + ``abs``(b))) % 2 == 0) ` `        ``return` `true``; ` ` `  `    ``return` `false``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `a = 5, b = 5, n = 11; ` ` `  `    ``if` `(Arrive(a, b, n)) ` `        ``cout << ``"Yes"``; ` `    ``else` `        ``cout << ``"No"``; ` ` `  `    ``return` `0; ` `} `

 `// Java program to check whether it is possible ` `// or not to move from (0, 0) to (x, y) ` `// in exactly n steps ` `import` `java.io.*; ` ` `  `public` `class` `GFG { ` ` `  `// Function to check whether it is possible ` `// or not to move from (0, 0) to (x, y) ` `// in exactly n steps ` `static` `boolean` `Arrive(``int` `a, ``int` `b, ``int` `n) ` `{ ` `    ``if` `(n >= Math.abs(a) + Math.abs(b) && (n - (Math.abs(a) + Math.abs(b))) % ``2` `== ``0``) ` `        ``return` `true``; ` ` `  `    ``return` `false``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` ` `  `    ``return` `0``; ` `} ` ` `  `    ``public` `static` `void` `main (String[] args) { ` `         `  `    ``int` `a = ``5``, b = ``5``, n = ``11``; ` ` `  `    ``if` `(Arrive(a, b, n)) ` `        ``System.out.println( ``"Yes"``); ` `    ``else` `        ``System.out.println( ``"No"``); ` `    ``} ` `} ` `//This code is contributed by shs.. `

 `# Python3 program to check whether  ` `# it is possible or not to move from  ` `# (0, 0) to (x, y) in exactly n steps  ` ` `  `# Function to check whether it is  ` `# possible or not to move from  ` `# (0, 0) to (x, y) in exactly n steps  ` `def` `Arrive(a, b, n): ` `     `  `    ``if` `(n >``=` `abs``(a) ``+` `abs``(b) ``and`  `       ``(n ``-` `(``abs``(a) ``+` `abs``(b))) ``%` `2` `=``=` `0``): ` `        ``return` `True` ` `  `    ``return` `False` ` `  `# Driver code  ` `a ``=` `5` `b ``=` `5` `n ``=` `11` ` `  `if` `(Arrive(a, b, n)):  ` `    ``print``(``"Yes"``)  ` `else``: ` `    ``print``(``"No"``)  ` ` `  `# This code is contributed ` `# by Yatin Gupta      `

 `// C# program to check whether  ` `// it is possible or not to  ` `// move from (0, 0) to (x, y) ` `// in exactly n steps ` `using` `System; ` ` `  `class` `GFG  ` `{ ` ` `  `// Function to check whether it  ` `// is possible or not to move  ` `// from (0, 0) to (x, y) in ` `// exactly n steps ` `static` `bool` `Arrive(``int` `a, ``int` `b, ``int` `n) ` `{ ` `    ``if` `(n >= Math.Abs(a) + Math.Abs(b) &&  ` `       ``(n - (Math.Abs(a) + Math.Abs(b))) % 2 == 0) ` `        ``return` `true``; ` ` `  `    ``return` `false``; ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main ()  ` `{ ` `    ``int` `a = 5, b = 5, n = 11; ` ` `  `    ``if` `(Arrive(a, b, n)) ` `        ``Console.WriteLine( ``"Yes"``); ` `    ``else` `        ``Console.WriteLine( ``"No"``); ` `    ``} ` `} ` ` `  `// This code is contributed by shashank `

 `= ``abs``(``\$a``) + ``abs``(``\$b``) ``and` `       ``(``\$n` `- (``abs``(``\$a``) + ``abs``(``\$b``))) % 2 == 0) ` `        ``return` `true; ` ` `  `    ``return` `false; ` `} ` ` `  `// Driver code ` `\$a` `= 5; ``\$b` `= 5; ``\$n` `= 11; ` ` `  `if` `(Arrive(``\$a``, ``\$b``, ``\$n``)) ` `    ``echo` `"Yes"``; ` `else` `    ``echo` `"No"``; ` ` `  `// This code is contributed  ` `// by Akanksha Rai(Abby_akku) `

Output:
```No
```

pawanasipugmailcom

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.

Article Tags :
Practice Tags :