Given a positive integer n such that n > 2. Divide numbers from 1 to n in two groups such that absolute difference of sum of each group is minimum. Print any two groups with their size in first line and in next line print elements of that group.

Examples:

Input : 5 Output : 2 5 2 3 4 3 1 Here sum of group 1 is 7 and sum of group 2 is 8. Their absolute difference is 1 which is minimum. We can have multiple correct answers. (1, 2, 5) and (3, 4) is another such group. Input : 6 Output : 2 6 4 4 5 3 2 1

We can always divide sum of n integers in two groups such that their absolute difference of their sum is 0 or 1. So sum of group at most differ by 1. We define sum of group1 as half of n elements sum.

Now run a loop from n to 1 and insert i into group1 if inserting an element doesn’t exceed group1 sum otherwise insert that i into group2.

## C++

// CPP program to divide n integers // in two groups such that absolute // difference of their sum is minimum #include <bits/stdc++.h> using namespace std; // To print vector along size void printVector(vector<int> v) { // Print vector size cout << v.size() << endl; // Print vector elements for (int i = 0; i < v.size(); i++) cout << v[i] << " "; cout << endl; } // To divide n in two groups such that // absolute difference of their sum is // minimum void findTwoGroup(int n) { // Find sum of all elements upto n int sum = n * (n + 1) / 2; // Sum of elements of group1 int group1Sum = sum / 2; vector<int> group1, group2; for (int i = n; i > 0; i--) { // If sum is greater then or equal // to 0 include i in group 1 // otherwise include in group2 if (group1Sum - i >= 0) { group1.push_back(i); // Decrease sum of group1 group1Sum -= i; } else { group2.push_back(i); } } // Print both the groups printVector(group1); printVector(group2); } // Driver program to test above functions int main() { int n = 5; findTwoGroup(n); return 0; }

## Java

// Java program to divide n integers // in two groups such that absolute // difference of their sum is minimum import java.io.*; import java.util.*; class GFG { // To print vector along size static void printVector(Vector<Integer> v) { // Print vector size System.out.println(v.size()); // Print vector elements for (int i = 0; i < v.size(); i++) System.out.print(v.get(i) + " "); System.out.println(); } // To divide n in two groups such that // absolute difference of their sum is // minimum static void findTwoGroup(int n) { // Find sum of all elements upto n int sum = n * (n + 1) / 2; // Sum of elements of group1 int group1Sum = sum / 2; Vector<Integer> group1 = new Vector<Integer>(); Vector<Integer> group2 = new Vector<Integer>(); for (int i = n; i > 0; i--) { // If sum is greater then or equal // to 0 include i in group1 // otherwise include in group2 if (group1Sum - i >= 0) { group1.add(i); // Decrease sum of group1 group1Sum -= i; } else { group2.add(i); } } // Print both the groups printVector(group1); printVector(group2); } // Driver code public static void main (String[] args) { int n = 5; findTwoGroup(n); } } // This code is contributed by Gitanjali.

## Python3

# Python program to divide n integers # in two groups such that absolute # difference of their sum is minimum import math # To print vector along size def printVector( v): # Print vector size print(len(v)) # Print vector elements for i in range( 0, len(v)): print(v[i] , end = " ") print() # To divide n in two groups such that # absolute difference of their sum is # minimum def findTwoGroup(n): # Find sum of all elements upto n sum = n * (n + 1) / 2 # Sum of elements of group1 group1Sum = sum / 2 group1=[] group2=[] for i in range(n, 0, -1): # If sum is greater then or equal # to 0 include i in group 1 # otherwise include in group2 if (group1Sum - i >= 0) : group1.append(i) # Decrease sum of group1 group1Sum -= i else : group2.append(i) # Print both the groups printVector(group1) printVector(group2) # driver code n = 5 findTwoGroup(n) # This code is contributed by Gitanjali.

Output:

2 5 2 3 4 3 1

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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.