Skip to main content

Generate all palindromic subsequence of n natural number Whose adjacent elements are different type

Here given code implementation process.

// C Program
// Generate all palindromic subsequence of n natural number 
// Whose adjacent elements are different type
#include <stdio.h>

// Display calculated result
void printResult(int result[], int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", result[i]);
	}
	printf("\n ");
}
int bothSimilar(int a, int b)
{
	if ((a % 2 == 0 && b % 2 == 0) || 
        (a % 2 == 1 && b % 2 == 1))
	{
		return 1;
	}
	return 0;
}
void sequence(int result[], int index, int n)
{
	if (index == n / 2)
	{
		if ((n % 2) != 0)
		{
			// Handles the request of odd length palindrome sequence
			for (int i = 1; i <= n; i++)
			{
				if (!bothSimilar(result[index - 1], i))
				{
					result[index] = i;
					printResult(result, n);
				}
			}
		}
		else
		{
			printResult(result, n);
		}
	}
	else if (index > n / 2)
	{
		return;
	}
	else
	{
		for (int i = 1; i <= n; i++)
		{
			if (index == 0 || (index > 0 && 
                               !bothSimilar(result[index - 1], i)))
			{
				result[index] = i;
				result[(n - 1) - index] = i;
				sequence(result, index + 1, n);
			}
		}
	}
}
void palindrome(int n)
{
	if (n <= 1 || n % 2 == 0)
	{
		return;
	}
	printf("\n Given Length : %d \n ", n);
	int result[n];
	sequence(result, 0, n);
}
int main()
{
	int n = 3;
	/*
	    n = 3
	    Given Length : 3 
	    ---------------
	
	    1 2 1 
	    2 1 2 
	    2 3 2 
	    3 2 3 
	    ---------------
	*/
	palindrome(n);
	n = 5;
	/*
	    n = 5
	    Given Length : 5 
	  ----------------
	  
	    1 2 1 2 1 
	    1 2 3 2 1 
	    1 2 5 2 1 
	    1 4 1 4 1 
	    1 4 3 4 1 
	    1 4 5 4 1 
	    2 1 2 1 2 
	    2 1 4 1 2 
	    2 3 2 3 2 
	    2 3 4 3 2 
	    2 5 2 5 2 
	    2 5 4 5 2 
	    3 2 1 2 3 
	    3 2 3 2 3 
	    3 2 5 2 3 
	    3 4 1 4 3 
	    3 4 3 4 3 
	    3 4 5 4 3 
	    4 1 2 1 4 
	    4 1 4 1 4 
	    4 3 2 3 4 
	    4 3 4 3 4 
	    4 5 2 5 4 
	    4 5 4 5 4 
	    5 2 1 2 5 
	    5 2 3 2 5 
	    5 2 5 2 5 
	    5 4 1 4 5 
	    5 4 3 4 5 
	    5 4 5 4 5
	  ---------------
	  Combination of Even Odd 
	              or Odd Even
	*/
	palindrome(n);
	return 0;
}

Output

 Given Length : 3
 1 2 1
 2 1 2
 2 3 2
 3 2 3

 Given Length : 5
 1 2 1 2 1
 1 2 3 2 1
 1 2 5 2 1
 1 4 1 4 1
 1 4 3 4 1
 1 4 5 4 1
 2 1 2 1 2
 2 1 4 1 2
 2 3 2 3 2
 2 3 4 3 2
 2 5 2 5 2
 2 5 4 5 2
 3 2 1 2 3
 3 2 3 2 3
 3 2 5 2 3
 3 4 1 4 3
 3 4 3 4 3
 3 4 5 4 3
 4 1 2 1 4
 4 1 4 1 4
 4 3 2 3 4
 4 3 4 3 4
 4 5 2 5 4
 4 5 4 5 4
 5 2 1 2 5
 5 2 3 2 5
 5 2 5 2 5
 5 4 1 4 5
 5 4 3 4 5
 5 4 5 4 5
// Java program for
// Generate all palindromic subsequence of n natural number 
// Whose adjacent elements are different type
public class Combination
{
	// Display calculated result
	public void printResult(int[] result, int n)
	{
		for (int i = 0; i < n; i++)
		{
			System.out.print("  " + result[i]);
		}
		System.out.print("\n ");
	}
	public boolean bothSimilar(int a, int b)
	{
		if ((a % 2 == 0 && b % 2 == 0) || 
            (a % 2 == 1 && b % 2 == 1))
		{
			return true;
		}
		return false;
	}
	public void sequence(int[] result, int index, int n)
	{
		if (index == n / 2)
		{
			if ((n % 2) != 0)
			{
				// Handles the request of odd length palindrome sequence
				for (int i = 1; i <= n; i++)
				{
					if (!bothSimilar(result[index - 1], i))
					{
						result[index] = i;
						printResult(result, n);
					}
				}
			}
			else
			{
				printResult(result, n);
			}
		}
		else if (index > n / 2)
		{
			return;
		}
		else
		{
			for (int i = 1; i <= n; i++)
			{
				if (index == 0 || (index > 0 && 
                                   !bothSimilar(result[index - 1], i)))
				{
					// Set palindrome elements
					result[index] = i;
					result[(n - 1) - index] = i;
					sequence(result, index + 1, n);
				}
			}
		}
	}
	public void palindrome(int n)
	{
		if (n <= 1 || n % 2 == 0)
		{
			return;
		}
		System.out.print("\n Given Length : " + n + " \n ");
		// Auxiliary array which is collect result
		int[] result = new int[n];
		sequence(result, 0, n);
	}
	public static void main(String[] args)
	{
		Combination task = new Combination();
		int n = 3;
		/*
		    n = 3
		    Given Length : 3 
		    ---------------
		
		    1 2 1 
		    2 1 2 
		    2 3 2 
		    3 2 3 
		    ---------------
		*/
		task.palindrome(n);
		n = 5;
		/*
		    n = 5
		    Given Length : 5 
		  ----------------
		  
		    1 2 1 2 1 
		    1 2 3 2 1 
		    1 2 5 2 1 
		    1 4 1 4 1 
		    1 4 3 4 1 
		    1 4 5 4 1 
		    2 1 2 1 2 
		    2 1 4 1 2 
		    2 3 2 3 2 
		    2 3 4 3 2 
		    2 5 2 5 2 
		    2 5 4 5 2 
		    3 2 1 2 3 
		    3 2 3 2 3 
		    3 2 5 2 3 
		    3 4 1 4 3 
		    3 4 3 4 3 
		    3 4 5 4 3 
		    4 1 2 1 4 
		    4 1 4 1 4 
		    4 3 2 3 4 
		    4 3 4 3 4 
		    4 5 2 5 4 
		    4 5 4 5 4 
		    5 2 1 2 5 
		    5 2 3 2 5 
		    5 2 5 2 5 
		    5 4 1 4 5 
		    5 4 3 4 5 
		    5 4 5 4 5
		  ---------------
		  Combination of Even Odd 
		              or Odd Even
		*/
		task.palindrome(n);
	}
}

Output

 Given Length : 3
   1  2  1
   2  1  2
   2  3  2
   3  2  3

 Given Length : 5
   1  2  1  2  1
   1  2  3  2  1
   1  2  5  2  1
   1  4  1  4  1
   1  4  3  4  1
   1  4  5  4  1
   2  1  2  1  2
   2  1  4  1  2
   2  3  2  3  2
   2  3  4  3  2
   2  5  2  5  2
   2  5  4  5  2
   3  2  1  2  3
   3  2  3  2  3
   3  2  5  2  3
   3  4  1  4  3
   3  4  3  4  3
   3  4  5  4  3
   4  1  2  1  4
   4  1  4  1  4
   4  3  2  3  4
   4  3  4  3  4
   4  5  2  5  4
   4  5  4  5  4
   5  2  1  2  5
   5  2  3  2  5
   5  2  5  2  5
   5  4  1  4  5
   5  4  3  4  5
   5  4  5  4  5
// Include header file
#include <iostream>
using namespace std;
// C++ program for
// Generate all palindromic subsequence of n natural number
// Whose adjacent elements are different type
class Combination
{
	public:
		// Display calculated result
		void printResult(int result[], int n)
		{
			for (int i = 0; i < n; i++)
			{
				cout << "  " << result[i];
			}
			cout << "\n ";
		}
	bool bothSimilar(int a, int b)
	{
		if ((a % 2 == 0 && b % 2 == 0) || 
            (a % 2 == 1 && b % 2 == 1))
		{
			return true;
		}
		return false;
	}
	void sequence(int result[], int index, int n)
	{
		if (index == n / 2)
		{
			if ((n % 2) != 0)
			{
				// Handles the request of odd length palindrome sequence
				for (int i = 1; i <= n; i++)
				{
					if (!this->bothSimilar(result[index - 1], i))
					{
						result[index] = i;
						this->printResult(result, n);
					}
				}
			}
			else
			{
				this->printResult(result, n);
			}
		}
		else if (index > n / 2)
		{
			return;
		}
		else
		{
			for (int i = 1; i <= n; i++)
			{
				if (index == 0 || (index > 0 && 
                                   !this->bothSimilar(result[index - 1], i)))
				{
					// Set palindrome elements
					result[index] = i;
					result[(n - 1) - index] = i;
					this->sequence(result, index + 1, n);
				}
			}
		}
	}
	void palindrome(int n)
	{
		if (n <= 1 || n % 2 == 0)
		{
			return;
		}
		cout << "\n Given Length : " << n << " \n ";
		// Auxiliary array which is collect result
		int result[n];
		this->sequence(result, 0, n);
	}
};
int main()
{
	Combination *task = new Combination();
	int n = 3;
	/*
	    n = 3
	    Given Length : 3 
	    ---------------

	    1 2 1 
	    2 1 2 
	    2 3 2 
	    3 2 3 
	    ---------------
	*/
	task->palindrome(n);
	n = 5;
	/*
	    n = 5
	    Given Length : 5 
	  ----------------
	  
	    1 2 1 2 1 
	    1 2 3 2 1 
	    1 2 5 2 1 
	    1 4 1 4 1 
	    1 4 3 4 1 
	    1 4 5 4 1 
	    2 1 2 1 2 
	    2 1 4 1 2 
	    2 3 2 3 2 
	    2 3 4 3 2 
	    2 5 2 5 2 
	    2 5 4 5 2 
	    3 2 1 2 3 
	    3 2 3 2 3 
	    3 2 5 2 3 
	    3 4 1 4 3 
	    3 4 3 4 3 
	    3 4 5 4 3 
	    4 1 2 1 4 
	    4 1 4 1 4 
	    4 3 2 3 4 
	    4 3 4 3 4 
	    4 5 2 5 4 
	    4 5 4 5 4 
	    5 2 1 2 5 
	    5 2 3 2 5 
	    5 2 5 2 5 
	    5 4 1 4 5 
	    5 4 3 4 5 
	    5 4 5 4 5
	  ---------------
	  Combination of Even Odd 
	              or Odd Even
	*/
	task->palindrome(n);
	return 0;
}

Output

 Given Length : 3
   1  2  1
   2  1  2
   2  3  2
   3  2  3

 Given Length : 5
   1  2  1  2  1
   1  2  3  2  1
   1  2  5  2  1
   1  4  1  4  1
   1  4  3  4  1
   1  4  5  4  1
   2  1  2  1  2
   2  1  4  1  2
   2  3  2  3  2
   2  3  4  3  2
   2  5  2  5  2
   2  5  4  5  2
   3  2  1  2  3
   3  2  3  2  3
   3  2  5  2  3
   3  4  1  4  3
   3  4  3  4  3
   3  4  5  4  3
   4  1  2  1  4
   4  1  4  1  4
   4  3  2  3  4
   4  3  4  3  4
   4  5  2  5  4
   4  5  4  5  4
   5  2  1  2  5
   5  2  3  2  5
   5  2  5  2  5
   5  4  1  4  5
   5  4  3  4  5
   5  4  5  4  5
// Include namespace system
using System;
// Csharp program for
// Generate all palindromic subsequence of n natural number
// Whose adjacent elements are different type
public class Combination
{
	// Display calculated result
	public void printResult(int[] result, int n)
	{
		for (int i = 0; i < n; i++)
		{
			Console.Write("  " + result[i]);
		}
		Console.Write("\n ");
	}
	public Boolean bothSimilar(int a, int b)
	{
		if ((a % 2 == 0 && b % 2 == 0) || 
            (a % 2 == 1 && b % 2 == 1))
		{
			return true;
		}
		return false;
	}
	public void sequence(int[] result, int index, int n)
	{
		if (index == n / 2)
		{
			if ((n % 2) != 0)
			{
				// Handles the request of odd length palindrome sequence
				for (int i = 1; i <= n; i++)
				{
					if (!this.bothSimilar(result[index - 1], i))
					{
						result[index] = i;
						this.printResult(result, n);
					}
				}
			}
			else
			{
				this.printResult(result, n);
			}
		}
		else if (index > n / 2)
		{
			return;
		}
		else
		{
			for (int i = 1; i <= n; i++)
			{
				if (index == 0 || (index > 0 && 
                                   !this.bothSimilar(result[index - 1], i)))
				{
					// Set palindrome elements
					result[index] = i;
					result[(n - 1) - index] = i;
					this.sequence(result, index + 1, n);
				}
			}
		}
	}
	public void palindrome(int n)
	{
		if (n <= 1 || n % 2 == 0)
		{
			return;
		}
		Console.Write("\n Given Length : " + n + " \n ");
		// Auxiliary array which is collect result
		int[] result = new int[n];
		this.sequence(result, 0, n);
	}
	public static void Main(String[] args)
	{
		Combination task = new Combination();
		int n = 3;
		/*
		    n = 3
		    Given Length : 3 
		    ---------------

		    1 2 1 
		    2 1 2 
		    2 3 2 
		    3 2 3 
		    ---------------
		*/
		task.palindrome(n);
		n = 5;
		/*
		    n = 5
		    Given Length : 5 
		  ----------------
		  
		    1 2 1 2 1 
		    1 2 3 2 1 
		    1 2 5 2 1 
		    1 4 1 4 1 
		    1 4 3 4 1 
		    1 4 5 4 1 
		    2 1 2 1 2 
		    2 1 4 1 2 
		    2 3 2 3 2 
		    2 3 4 3 2 
		    2 5 2 5 2 
		    2 5 4 5 2 
		    3 2 1 2 3 
		    3 2 3 2 3 
		    3 2 5 2 3 
		    3 4 1 4 3 
		    3 4 3 4 3 
		    3 4 5 4 3 
		    4 1 2 1 4 
		    4 1 4 1 4 
		    4 3 2 3 4 
		    4 3 4 3 4 
		    4 5 2 5 4 
		    4 5 4 5 4 
		    5 2 1 2 5 
		    5 2 3 2 5 
		    5 2 5 2 5 
		    5 4 1 4 5 
		    5 4 3 4 5 
		    5 4 5 4 5
		  ---------------
		  Combination of Even Odd 
		              or Odd Even
		*/
		task.palindrome(n);
	}
}

Output

 Given Length : 3
   1  2  1
   2  1  2
   2  3  2
   3  2  3

 Given Length : 5
   1  2  1  2  1
   1  2  3  2  1
   1  2  5  2  1
   1  4  1  4  1
   1  4  3  4  1
   1  4  5  4  1
   2  1  2  1  2
   2  1  4  1  2
   2  3  2  3  2
   2  3  4  3  2
   2  5  2  5  2
   2  5  4  5  2
   3  2  1  2  3
   3  2  3  2  3
   3  2  5  2  3
   3  4  1  4  3
   3  4  3  4  3
   3  4  5  4  3
   4  1  2  1  4
   4  1  4  1  4
   4  3  2  3  4
   4  3  4  3  4
   4  5  2  5  4
   4  5  4  5  4
   5  2  1  2  5
   5  2  3  2  5
   5  2  5  2  5
   5  4  1  4  5
   5  4  3  4  5
   5  4  5  4  5
package main
import "fmt"
// Go program for
// Generate all palindromic subsequence of n natural number
// Whose adjacent elements are different type
type Combination struct {}
func getCombination() * Combination {
	var me *Combination = &Combination {}
	return me
}
// Display calculated result
func(this Combination) printResult(result[] int, n int) {
	for i := 0 ; i < n ; i++ {
		fmt.Print("  ", result[i])
	}
	fmt.Print("\n ")
}
func(this Combination) bothSimilar(a, b int) bool {
	if (a % 2 == 0 && b % 2 == 0) || 
	   (a % 2 == 1 && b % 2 == 1) {
		return true
	}
	return false
}
func(this Combination) sequence(result[] int, index int, n int) {
	if index == n / 2 {
		if (n % 2) != 0 {
			// Handles the request of odd length palindrome sequence
			for i := 1 ; i <= n ; i++ {
				if !this.bothSimilar(result[index - 1], i) {
					result[index] = i
					this.printResult(result, n)
				}
			}
		} else {
			this.printResult(result, n)
		}
	} else if index > n / 2 {
		return
	} else {
		for i := 1 ; i <= n ; i++ {
			if index == 0 || 
			(index > 0 && !this.bothSimilar(result[index - 1], i)) {
				// Set palindrome elements
				result[index] = i
				result[(n - 1) - index] = i
				this.sequence(result, index + 1, n)
			}
		}
	}
}
func(this Combination) palindrome(n int) {
	if n <= 1 || n % 2 == 0 {
		return
	}
	fmt.Print("\n Given Length : ", n, " \n ")
	// Auxiliary array which is collect result
	var result = make([] int, n)
	this.sequence(result, 0, n)
}
func main() {
	var task * Combination = getCombination()
	var n int = 3
	/*
	    n = 3
	    Given Length : 3 
	    ---------------

	    1 2 1 
	    2 1 2 
	    2 3 2 
	    3 2 3 
	    ---------------
	*/
	task.palindrome(n)
	n = 5
	/*
	    n = 5
	    Given Length : 5 
	  ----------------
	  
	    1 2 1 2 1 
	    1 2 3 2 1 
	    1 2 5 2 1 
	    1 4 1 4 1 
	    1 4 3 4 1 
	    1 4 5 4 1 
	    2 1 2 1 2 
	    2 1 4 1 2 
	    2 3 2 3 2 
	    2 3 4 3 2 
	    2 5 2 5 2 
	    2 5 4 5 2 
	    3 2 1 2 3 
	    3 2 3 2 3 
	    3 2 5 2 3 
	    3 4 1 4 3 
	    3 4 3 4 3 
	    3 4 5 4 3 
	    4 1 2 1 4 
	    4 1 4 1 4 
	    4 3 2 3 4 
	    4 3 4 3 4 
	    4 5 2 5 4 
	    4 5 4 5 4 
	    5 2 1 2 5 
	    5 2 3 2 5 
	    5 2 5 2 5 
	    5 4 1 4 5 
	    5 4 3 4 5 
	    5 4 5 4 5
	  ---------------
	  Combination of Even Odd 
	              or Odd Even
	*/
	task.palindrome(n)
}

Output

 Given Length : 3
   1  2  1
   2  1  2
   2  3  2
   3  2  3

 Given Length : 5
   1  2  1  2  1
   1  2  3  2  1
   1  2  5  2  1
   1  4  1  4  1
   1  4  3  4  1
   1  4  5  4  1
   2  1  2  1  2
   2  1  4  1  2
   2  3  2  3  2
   2  3  4  3  2
   2  5  2  5  2
   2  5  4  5  2
   3  2  1  2  3
   3  2  3  2  3
   3  2  5  2  3
   3  4  1  4  3
   3  4  3  4  3
   3  4  5  4  3
   4  1  2  1  4
   4  1  4  1  4
   4  3  2  3  4
   4  3  4  3  4
   4  5  2  5  4
   4  5  4  5  4
   5  2  1  2  5
   5  2  3  2  5
   5  2  5  2  5
   5  4  1  4  5
   5  4  3  4  5
   5  4  5  4  5
<?php
// Php program for
// Generate all palindromic subsequence of n natural number
// Whose adjacent elements are different type
class Combination
{
	// Display calculated result
	public	function printResult($result, $n)
	{
		for ($i = 0; $i < $n; $i++)
		{
			echo("  ".$result[$i]);
		}
		echo("\n ");
	}
	public	function bothSimilar($a, $b)
	{
		if (($a % 2 == 0 && $b % 2 == 0) || 
            ($a % 2 == 1 && $b % 2 == 1))
		{
			return true;
		}
		return false;
	}
	public	function sequence($result, $index, $n)
	{
		if ($index == (int)($n / 2))
		{
			if (($n % 2) != 0)
			{
				// Handles the request of odd length palindrome sequence
				for ($i = 1; $i <= $n; $i++)
				{
					if (!$this->bothSimilar($result[$index - 1], $i))
					{
						$result[$index] = $i;
						$this->printResult($result, $n);
					}
				}
			}
			else
			{
				$this->printResult($result, $n);
			}
		}
		else if ($index > (int)($n / 2))
		{
			return;
		}
		else
		{
			for ($i = 1; $i <= $n; $i++)
			{
				if ($index == 0 || ($index > 0 && 
                                    !$this->bothSimilar($result[$index - 1],
                                                        $i)))
				{
					// Set palindrome elements
					$result[$index] = $i;
					$result[($n - 1) - $index] = $i;
					$this->sequence($result, $index + 1, $n);
				}
			}
		}
	}
	public	function palindrome($n)
	{
		if ($n <= 1 || $n % 2 == 0)
		{
			return;
		}
		echo("\n Given Length : ".$n.
			" \n ");
		// Auxiliary array which is collect result
		$result = array_fill(0, $n, 0);
		$this->sequence($result, 0, $n);
	}
}

function main()
{
	$task = new Combination();
	$n = 3;
	/*
	    n = 3
	    Given Length : 3 
	    ---------------

	    1 2 1 
	    2 1 2 
	    2 3 2 
	    3 2 3 
	    ---------------
	*/
	$task->palindrome($n);
	$n = 5;
	/*
	    n = 5
	    Given Length : 5 
	  ----------------
	  
	    1 2 1 2 1 
	    1 2 3 2 1 
	    1 2 5 2 1 
	    1 4 1 4 1 
	    1 4 3 4 1 
	    1 4 5 4 1 
	    2 1 2 1 2 
	    2 1 4 1 2 
	    2 3 2 3 2 
	    2 3 4 3 2 
	    2 5 2 5 2 
	    2 5 4 5 2 
	    3 2 1 2 3 
	    3 2 3 2 3 
	    3 2 5 2 3 
	    3 4 1 4 3 
	    3 4 3 4 3 
	    3 4 5 4 3 
	    4 1 2 1 4 
	    4 1 4 1 4 
	    4 3 2 3 4 
	    4 3 4 3 4 
	    4 5 2 5 4 
	    4 5 4 5 4 
	    5 2 1 2 5 
	    5 2 3 2 5 
	    5 2 5 2 5 
	    5 4 1 4 5 
	    5 4 3 4 5 
	    5 4 5 4 5
	  ---------------
	  Combination of Even Odd 
	              or Odd Even
	*/
	$task->palindrome($n);
}
main();

Output

 Given Length : 3
   1  2  1
   2  1  2
   2  3  2
   3  2  3

 Given Length : 5
   1  2  1  2  1
   1  2  3  2  1
   1  2  5  2  1
   1  4  1  4  1
   1  4  3  4  1
   1  4  5  4  1
   2  1  2  1  2
   2  1  4  1  2
   2  3  2  3  2
   2  3  4  3  2
   2  5  2  5  2
   2  5  4  5  2
   3  2  1  2  3
   3  2  3  2  3
   3  2  5  2  3
   3  4  1  4  3
   3  4  3  4  3
   3  4  5  4  3
   4  1  2  1  4
   4  1  4  1  4
   4  3  2  3  4
   4  3  4  3  4
   4  5  2  5  4
   4  5  4  5  4
   5  2  1  2  5
   5  2  3  2  5
   5  2  5  2  5
   5  4  1  4  5
   5  4  3  4  5
   5  4  5  4  5
// Node JS program for
// Generate all palindromic subsequence of n natural number
// Whose adjacent elements are different type
class Combination
{
	// Display calculated result
	printResult(result, n)
	{
		for (var i = 0; i < n; i++)
		{
			process.stdout.write("  " + result[i]);
		}
		process.stdout.write("\n ");
	}
	bothSimilar(a, b)
	{
		if ((a % 2 == 0 && b % 2 == 0) || 
            (a % 2 == 1 && b % 2 == 1))
		{
			return true;
		}
		return false;
	}
	sequence(result, index, n)
	{
		if (index == parseInt(n / 2))
		{
			if ((n % 2) != 0)
			{
				// Handles the request of odd length palindrome sequence
				for (var i = 1; i <= n; i++)
				{
					if (!this.bothSimilar(result[index - 1], i))
					{
						result[index] = i;
						this.printResult(result, n);
					}
				}
			}
			else
			{
				this.printResult(result, n);
			}
		}
		else if (index > parseInt(n / 2))
		{
			return;
		}
		else
		{
			for (var i = 1; i <= n; i++)
			{
				if (index == 0 || 
                    (index > 0 && 
                     !this.bothSimilar(result[index - 1], i)))
				{
					// Set palindrome elements
					result[index] = i;
					result[(n - 1) - index] = i;
					this.sequence(result, index + 1, n);
				}
			}
		}
	}
	palindrome(n)
	{
		if (n <= 1 || n % 2 == 0)
		{
			return;
		}
		process.stdout.write("\n Given Length : " + n + " \n ");
		// Auxiliary array which is collect result
		var result = Array(n).fill(0);
		this.sequence(result, 0, n);
	}
}

function main()
{
	var task = new Combination();
	var n = 3;
	/*
	    n = 3
	    Given Length : 3 
	    ---------------

	    1 2 1 
	    2 1 2 
	    2 3 2 
	    3 2 3 
	    ---------------
	*/
	task.palindrome(n);
	n = 5;
	/*
	    n = 5
	    Given Length : 5 
	  ----------------
	  
	    1 2 1 2 1 
	    1 2 3 2 1 
	    1 2 5 2 1 
	    1 4 1 4 1 
	    1 4 3 4 1 
	    1 4 5 4 1 
	    2 1 2 1 2 
	    2 1 4 1 2 
	    2 3 2 3 2 
	    2 3 4 3 2 
	    2 5 2 5 2 
	    2 5 4 5 2 
	    3 2 1 2 3 
	    3 2 3 2 3 
	    3 2 5 2 3 
	    3 4 1 4 3 
	    3 4 3 4 3 
	    3 4 5 4 3 
	    4 1 2 1 4 
	    4 1 4 1 4 
	    4 3 2 3 4 
	    4 3 4 3 4 
	    4 5 2 5 4 
	    4 5 4 5 4 
	    5 2 1 2 5 
	    5 2 3 2 5 
	    5 2 5 2 5 
	    5 4 1 4 5 
	    5 4 3 4 5 
	    5 4 5 4 5
	  ---------------
	  Combination of Even Odd 
	              or Odd Even
	*/
	task.palindrome(n);
}
main();

Output

 Given Length : 3
   1  2  1
   2  1  2
   2  3  2
   3  2  3

 Given Length : 5
   1  2  1  2  1
   1  2  3  2  1
   1  2  5  2  1
   1  4  1  4  1
   1  4  3  4  1
   1  4  5  4  1
   2  1  2  1  2
   2  1  4  1  2
   2  3  2  3  2
   2  3  4  3  2
   2  5  2  5  2
   2  5  4  5  2
   3  2  1  2  3
   3  2  3  2  3
   3  2  5  2  3
   3  4  1  4  3
   3  4  3  4  3
   3  4  5  4  3
   4  1  2  1  4
   4  1  4  1  4
   4  3  2  3  4
   4  3  4  3  4
   4  5  2  5  4
   4  5  4  5  4
   5  2  1  2  5
   5  2  3  2  5
   5  2  5  2  5
   5  4  1  4  5
   5  4  3  4  5
   5  4  5  4  5
#  Python 3 program for
#  Generate all palindromic subsequence of n natural number
#  Whose adjacent elements are different type
class Combination :
	#  Display calculated result
	def printResult(self, result, n) :
		i = 0
		while (i < n) :
			print("  ", result[i], end = "")
			i += 1
		
		print("\n ", end = "")
	
	def bothSimilar(self, a, b) :
		if ((a % 2 == 0 and b % 2 == 0) or
            (a % 2 == 1 and b % 2 == 1)) :
			return True
		
		return False
	
	def sequence(self, result, index, n) :
		if (index == int(n / 2)) :
			if ((n % 2) != 0) :
				i = 1
				#  Handles the request of odd length palindrome sequence
				while (i <= n) :
					if (not self.bothSimilar(result[index - 1], i)) :
						result[index] = i
						self.printResult(result, n)
					
					i += 1
				
			else :
				self.printResult(result, n)
			
		elif (index > int(n / 2)) :
			return
		else :
			i = 1
			while (i <= n) :
				if (index == 0 or(index > 0 and not 
                    self.bothSimilar(result[index - 1], i))) :
					#  Set palindrome elements
					result[index] = i
					result[(n - 1) - index] = i
					self.sequence(result, index + 1, n)
				
				i += 1
			
		
	
	def palindrome(self, n) :
		if (n <= 1 or n % 2 == 0) :
			return
		
		print("\n Given Length : ", n ," \n ", end = "")
		#  Auxiliary list which is collect result
		result = [0] * (n)
		self.sequence(result, 0, n)
	

def main() :
	task = Combination()
	n = 3
	#    n = 3
	#    Given Length : 3 
	#    ---------------
	#    1 2 1 
	#    2 1 2 
	#    2 3 2 
	#    3 2 3 
	#    ---------------
	task.palindrome(n)
	n = 5
	#    n = 5
	#    Given Length : 5 
	#  ----------------
	#    1 2 1 2 1 
	#    1 2 3 2 1 
	#    1 2 5 2 1 
	#    1 4 1 4 1 
	#    1 4 3 4 1 
	#    1 4 5 4 1 
	#    2 1 2 1 2 
	#    2 1 4 1 2 
	#    2 3 2 3 2 
	#    2 3 4 3 2 
	#    2 5 2 5 2 
	#    2 5 4 5 2 
	#    3 2 1 2 3 
	#    3 2 3 2 3 
	#    3 2 5 2 3 
	#    3 4 1 4 3 
	#    3 4 3 4 3 
	#    3 4 5 4 3 
	#    4 1 2 1 4 
	#    4 1 4 1 4 
	#    4 3 2 3 4 
	#    4 3 4 3 4 
	#    4 5 2 5 4 
	#    4 5 4 5 4 
	#    5 2 1 2 5 
	#    5 2 3 2 5 
	#    5 2 5 2 5 
	#    5 4 1 4 5 
	#    5 4 3 4 5 
	#    5 4 5 4 5
	#  ---------------
	#  Combination of Even Odd 
	#              or Odd Even
	task.palindrome(n)

if __name__ == "__main__": main()

Output

 Given Length :  3
    1   2   1
    2   1   2
    2   3   2
    3   2   3

 Given Length :  5
    1   2   1   2   1
    1   2   3   2   1
    1   2   5   2   1
    1   4   1   4   1
    1   4   3   4   1
    1   4   5   4   1
    2   1   2   1   2
    2   1   4   1   2
    2   3   2   3   2
    2   3   4   3   2
    2   5   2   5   2
    2   5   4   5   2
    3   2   1   2   3
    3   2   3   2   3
    3   2   5   2   3
    3   4   1   4   3
    3   4   3   4   3
    3   4   5   4   3
    4   1   2   1   4
    4   1   4   1   4
    4   3   2   3   4
    4   3   4   3   4
    4   5   2   5   4
    4   5   4   5   4
    5   2   1   2   5
    5   2   3   2   5
    5   2   5   2   5
    5   4   1   4   5
    5   4   3   4   5
    5   4   5   4   5
#  Ruby program for
#  Generate all palindromic subsequence of n natural number
#  Whose adjacent elements are different type
class Combination 
	#  Display calculated result
	def printResult(result, n) 
		i = 0
		while (i < n) 
			print("  ", result[i])
			i += 1
		end

		print("\n ")
	end

	def bothSimilar(a, b) 
		if ((a % 2 == 0 && b % 2 == 0) || 
            (a % 2 == 1 && b % 2 == 1)) 
			return true
		end

		return false
	end

	def sequence(result, index, n) 
		if (index == n / 2) 
			if ((n % 2) != 0) 
				i = 1
				#  Handles the request of odd length palindrome sequence
				while (i <= n) 
					if (!self.bothSimilar(result[index - 1], i)) 
						result[index] = i
						self.printResult(result, n)
					end

					i += 1
				end

			else
 
				self.printResult(result, n)
			end

		elsif (index > n / 2) 
			return
		else
 
			i = 1
			while (i <= n) 
				if (index == 0 || 
                    (index > 0 && !self.bothSimilar(result[index - 1], i))) 
					#  Set palindrome elements
					result[index] = i
					result[(n - 1) - index] = i
					self.sequence(result, index + 1, n)
				end

				i += 1
			end

		end

	end

	def palindrome(n) 
		if (n <= 1 || n % 2 == 0) 
			return
		end

		print("\n Given Length : ", n ," \n ")
		#  Auxiliary array which is collect result
		result = Array.new(n) {0}
		self.sequence(result, 0, n)
	end

end

def main() 
	task = Combination.new()
	n = 3
	#    n = 3
	#    Given Length : 3 
	#    ---------------
	#    1 2 1 
	#    2 1 2 
	#    2 3 2 
	#    3 2 3 
	#    ---------------
	task.palindrome(n)
	n = 5
	#    n = 5
	#    Given Length : 5 
	#  ----------------
	#    1 2 1 2 1 
	#    1 2 3 2 1 
	#    1 2 5 2 1 
	#    1 4 1 4 1 
	#    1 4 3 4 1 
	#    1 4 5 4 1 
	#    2 1 2 1 2 
	#    2 1 4 1 2 
	#    2 3 2 3 2 
	#    2 3 4 3 2 
	#    2 5 2 5 2 
	#    2 5 4 5 2 
	#    3 2 1 2 3 
	#    3 2 3 2 3 
	#    3 2 5 2 3 
	#    3 4 1 4 3 
	#    3 4 3 4 3 
	#    3 4 5 4 3 
	#    4 1 2 1 4 
	#    4 1 4 1 4 
	#    4 3 2 3 4 
	#    4 3 4 3 4 
	#    4 5 2 5 4 
	#    4 5 4 5 4 
	#    5 2 1 2 5 
	#    5 2 3 2 5 
	#    5 2 5 2 5 
	#    5 4 1 4 5 
	#    5 4 3 4 5 
	#    5 4 5 4 5
	#  ---------------
	#  Combination of Even Odd 
	#              or Odd Even
	task.palindrome(n)
end

main()

Output

 Given Length : 3 
   1  2  1
   2  1  2
   2  3  2
   3  2  3
 
 Given Length : 5 
   1  2  1  2  1
   1  2  3  2  1
   1  2  5  2  1
   1  4  1  4  1
   1  4  3  4  1
   1  4  5  4  1
   2  1  2  1  2
   2  1  4  1  2
   2  3  2  3  2
   2  3  4  3  2
   2  5  2  5  2
   2  5  4  5  2
   3  2  1  2  3
   3  2  3  2  3
   3  2  5  2  3
   3  4  1  4  3
   3  4  3  4  3
   3  4  5  4  3
   4  1  2  1  4
   4  1  4  1  4
   4  3  2  3  4
   4  3  4  3  4
   4  5  2  5  4
   4  5  4  5  4
   5  2  1  2  5
   5  2  3  2  5
   5  2  5  2  5
   5  4  1  4  5
   5  4  3  4  5
   5  4  5  4  5
 
// Scala program for
// Generate all palindromic subsequence of n natural number
// Whose adjacent elements are different type
class Combination()
{
	// Display calculated result
	def printResult(result: Array[Int], n: Int): Unit = {
		var i: Int = 0;
		while (i < n)
		{
			print("  " + result(i));
			i += 1;
		}
		print("\n ");
	}
	def bothSimilar(a: Int, b: Int): Boolean = {
		if ((a % 2 == 0 && b % 2 == 0) || 
            (a % 2 == 1 && b % 2 == 1))
		{
			return true;
		}
		return false;
	}
	def sequence(result: Array[Int], 
      	index: Int,
        n: Int): Unit = {
		if (index == n / 2)
		{
			if ((n % 2) != 0)
			{
				var i: Int = 1;
				// Handles the request of odd length palindrome sequence
				while (i <= n)
				{
					if (!bothSimilar(result(index - 1), i))
					{
						result(index) = i;
						printResult(result, n);
					}
					i += 1;
				}
			}
			else
			{
				printResult(result, n);
			}
		}
		else if (index > n / 2)
		{
			return;
		}
		else
		{
			var i: Int = 1;
			while (i <= n)
			{
				if (index == 0 || (index > 0 && 
                                   !bothSimilar(result(index - 1), i)))
				{
					// Set palindrome elements
					result(index) = i;
					result((n - 1) - index) = i;
					sequence(result, index + 1, n);
				}
				i += 1;
			}
		}
	}
	def palindrome(n: Int): Unit = {
		if (n <= 1 || n % 2 == 0)
		{
			return;
		}
		print("\n Given Length : " + n + " \n ");
		// Auxiliary array which is collect result
		var result: Array[Int] = Array.fill[Int](n)(0);
		sequence(result, 0, n);
	}
}
object Main
{
	def main(args: Array[String]): Unit = {
		var task: Combination = new Combination();
		var n: Int = 3;
		/*
		    n = 3
		    Given Length : 3 
		    ---------------

		    1 2 1 
		    2 1 2 
		    2 3 2 
		    3 2 3 
		    ---------------
		*/
		task.palindrome(n);
		n = 5;
		/*
		    n = 5
		    Given Length : 5 
		  ----------------
		  
		    1 2 1 2 1 
		    1 2 3 2 1 
		    1 2 5 2 1 
		    1 4 1 4 1 
		    1 4 3 4 1 
		    1 4 5 4 1 
		    2 1 2 1 2 
		    2 1 4 1 2 
		    2 3 2 3 2 
		    2 3 4 3 2 
		    2 5 2 5 2 
		    2 5 4 5 2 
		    3 2 1 2 3 
		    3 2 3 2 3 
		    3 2 5 2 3 
		    3 4 1 4 3 
		    3 4 3 4 3 
		    3 4 5 4 3 
		    4 1 2 1 4 
		    4 1 4 1 4 
		    4 3 2 3 4 
		    4 3 4 3 4 
		    4 5 2 5 4 
		    4 5 4 5 4 
		    5 2 1 2 5 
		    5 2 3 2 5 
		    5 2 5 2 5 
		    5 4 1 4 5 
		    5 4 3 4 5 
		    5 4 5 4 5
		  ---------------
		  Combination of Even Odd 
		              or Odd Even
		*/
		task.palindrome(n);
	}
}

Output

 Given Length : 3
   1  2  1
   2  1  2
   2  3  2
   3  2  3

 Given Length : 5
   1  2  1  2  1
   1  2  3  2  1
   1  2  5  2  1
   1  4  1  4  1
   1  4  3  4  1
   1  4  5  4  1
   2  1  2  1  2
   2  1  4  1  2
   2  3  2  3  2
   2  3  4  3  2
   2  5  2  5  2
   2  5  4  5  2
   3  2  1  2  3
   3  2  3  2  3
   3  2  5  2  3
   3  4  1  4  3
   3  4  3  4  3
   3  4  5  4  3
   4  1  2  1  4
   4  1  4  1  4
   4  3  2  3  4
   4  3  4  3  4
   4  5  2  5  4
   4  5  4  5  4
   5  2  1  2  5
   5  2  3  2  5
   5  2  5  2  5
   5  4  1  4  5
   5  4  3  4  5
   5  4  5  4  5
// Swift 4 program for
// Generate all palindromic subsequence of n natural number
// Whose adjacent elements are different type
class Combination
{
	// Display calculated result
	func printResult(_ result: [Int], _ n: Int)
	{
		var i: Int = 0;
		while (i < n)
		{
			print("  ", result[i], terminator: "");
			i += 1;
		}
		print("\n ", terminator: "");
	}
	func bothSimilar(_ a: Int, _ b: Int) -> Bool
	{
		if ((a % 2 == 0 && b % 2 == 0) || 
            (a % 2 == 1 && b % 2 == 1))
		{
			return true;
		}
		return false;
	}
	func sequence(
      _ result: inout[Int], 
      _ index: Int, 
      _ n: Int)
	{
		if (index == n / 2)
		{
			if ((n % 2)  != 0)
			{
				var i: Int = 1;
				// Handles the request of odd length palindrome sequence
				while (i <= n)
				{
					if (!self.bothSimilar(result[index - 1], i))
					{
						result[index] = i;
						self.printResult(result, n);
					}
					i += 1;
				}
			}
			else
			{
				self.printResult(result, n);
			}
		}
		else if (index > n / 2)
		{
			return;
		}
		else
		{
			var i: Int = 1;
			while (i <= n)
			{
				if (index == 0 || 
                    (index > 0 && 
                     !self.bothSimilar(result[index - 1], i)))
				{
					// Set palindrome elements
					result[index] = i;
					result[(n - 1) - index] = i;
					self.sequence(&result, index + 1, n);
				}
				i += 1;
			}
		}
	}
	func palindrome(_ n: Int)
	{
		if (n <= 1 || n % 2 == 0)
		{
			return;
		}
		print("\n Given Length : ", n ," \n ", terminator: "");
		// Auxiliary array which is collect result
		var result: [Int] = Array(repeating: 0, count: n);
		self.sequence(&result, 0, n);
	}
}
func main()
{
	let task: Combination = Combination();
	var n: Int = 3;
	/*
	    n = 3
	    Given Length : 3 
	    ---------------

	    1 2 1 
	    2 1 2 
	    2 3 2 
	    3 2 3 
	    ---------------
	*/
	task.palindrome(n);
	n = 5;
	/*
	    n = 5
	    Given Length : 5 
	  ----------------
	  
	    1 2 1 2 1 
	    1 2 3 2 1 
	    1 2 5 2 1 
	    1 4 1 4 1 
	    1 4 3 4 1 
	    1 4 5 4 1 
	    2 1 2 1 2 
	    2 1 4 1 2 
	    2 3 2 3 2 
	    2 3 4 3 2 
	    2 5 2 5 2 
	    2 5 4 5 2 
	    3 2 1 2 3 
	    3 2 3 2 3 
	    3 2 5 2 3 
	    3 4 1 4 3 
	    3 4 3 4 3 
	    3 4 5 4 3 
	    4 1 2 1 4 
	    4 1 4 1 4 
	    4 3 2 3 4 
	    4 3 4 3 4 
	    4 5 2 5 4 
	    4 5 4 5 4 
	    5 2 1 2 5 
	    5 2 3 2 5 
	    5 2 5 2 5 
	    5 4 1 4 5 
	    5 4 3 4 5 
	    5 4 5 4 5
	  ---------------
	  Combination of Even Odd 
	              or Odd Even
	*/
	task.palindrome(n);
}
main();

Output

 Given Length :  3
    1   2   1
    2   1   2
    2   3   2
    3   2   3

 Given Length :  5
    1   2   1   2   1
    1   2   3   2   1
    1   2   5   2   1
    1   4   1   4   1
    1   4   3   4   1
    1   4   5   4   1
    2   1   2   1   2
    2   1   4   1   2
    2   3   2   3   2
    2   3   4   3   2
    2   5   2   5   2
    2   5   4   5   2
    3   2   1   2   3
    3   2   3   2   3
    3   2   5   2   3
    3   4   1   4   3
    3   4   3   4   3
    3   4   5   4   3
    4   1   2   1   4
    4   1   4   1   4
    4   3   2   3   4
    4   3   4   3   4
    4   5   2   5   4
    4   5   4   5   4
    5   2   1   2   5
    5   2   3   2   5
    5   2   5   2   5
    5   4   1   4   5
    5   4   3   4   5
    5   4   5   4   5
// Kotlin program for
// Generate all palindromic subsequence of n natural number
// Whose adjacent elements are different type
class Combination
{
	// Display calculated result
	fun printResult(result: Array < Int > , n: Int): Unit
	{
		var i: Int = 0;
		while (i < n)
		{
			print("  " + result[i]);
			i += 1;
		}
		print("\n ");
	}
	fun bothSimilar(a: Int, b: Int): Boolean
	{
		if ((a % 2 == 0 && b % 2 == 0) || 
            (a % 2 == 1 && b % 2 == 1))
		{
			return true;
		}
		return false;
	}
	fun sequence(result: Array < Int > , 
                 index: Int, n: Int): Unit
	{
		if (index == n / 2)
		{
			if ((n % 2) != 0)
			{
				var i: Int = 1;
				// Handles the request of odd length palindrome sequence
				while (i <= n)
				{
					if (!this.bothSimilar(result[index - 1], i))
					{
						result[index] = i;
						this.printResult(result, n);
					}
					i += 1;
				}
			}
			else
			{
				this.printResult(result, n);
			}
		}
		else if (index > n / 2)
		{
			return;
		}
		else
		{
			var i: Int = 1;
			while (i <= n)
			{
				if (index == 0 || 
                    (index > 0 && 
                     !this.bothSimilar(result[index - 1], i)))
				{
					// Set palindrome elements
					result[index] = i;
					result[(n - 1) - index] = i;
					this.sequence(result, index + 1, n);
				}
				i += 1;
			}
		}
	}
	fun palindrome(n: Int): Unit
	{
		if (n <= 1 || n % 2 == 0)
		{
			return;
		}
		print("\n Given Length : " + n + " \n ");
		// Auxiliary array which is collect result
		val result: Array < Int > = Array(n)
		{
			0
		};
		this.sequence(result, 0, n);
	}
}
fun main(args: Array < String > ): Unit
{
	val task: Combination = Combination();
	var n: Int = 3;
	/*
	    n = 3
	    Given Length : 3 
	    ---------------

	    1 2 1 
	    2 1 2 
	    2 3 2 
	    3 2 3 
	    ---------------
	*/
	task.palindrome(n);
	n = 5;
	/*
	    n = 5
	    Given Length : 5 
	  ----------------
	  
	    1 2 1 2 1 
	    1 2 3 2 1 
	    1 2 5 2 1 
	    1 4 1 4 1 
	    1 4 3 4 1 
	    1 4 5 4 1 
	    2 1 2 1 2 
	    2 1 4 1 2 
	    2 3 2 3 2 
	    2 3 4 3 2 
	    2 5 2 5 2 
	    2 5 4 5 2 
	    3 2 1 2 3 
	    3 2 3 2 3 
	    3 2 5 2 3 
	    3 4 1 4 3 
	    3 4 3 4 3 
	    3 4 5 4 3 
	    4 1 2 1 4 
	    4 1 4 1 4 
	    4 3 2 3 4 
	    4 3 4 3 4 
	    4 5 2 5 4 
	    4 5 4 5 4 
	    5 2 1 2 5 
	    5 2 3 2 5 
	    5 2 5 2 5 
	    5 4 1 4 5 
	    5 4 3 4 5 
	    5 4 5 4 5
	  ---------------
	  Combination of Even Odd 
	              or Odd Even
	*/
	task.palindrome(n);
}

Output

 Given Length : 3
   1  2  1
   2  1  2
   2  3  2
   3  2  3

 Given Length : 5
   1  2  1  2  1
   1  2  3  2  1
   1  2  5  2  1
   1  4  1  4  1
   1  4  3  4  1
   1  4  5  4  1
   2  1  2  1  2
   2  1  4  1  2
   2  3  2  3  2
   2  3  4  3  2
   2  5  2  5  2
   2  5  4  5  2
   3  2  1  2  3
   3  2  3  2  3
   3  2  5  2  3
   3  4  1  4  3
   3  4  3  4  3
   3  4  5  4  3
   4  1  2  1  4
   4  1  4  1  4
   4  3  2  3  4
   4  3  4  3  4
   4  5  2  5  4
   4  5  4  5  4
   5  2  1  2  5
   5  2  3  2  5
   5  2  5  2  5
   5  4  1  4  5
   5  4  3  4  5
   5  4  5  4  5




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment