import java.util.*;

public class Main 
{
    //Also explored as non class level variable, issue persists!
    static List<List<Integer>> finalMatrix = new ArrayList<List<Integer>>();
    
    public static void main (String[] args)
    {
        Integer [][]test = new Integer[][] {{1,2,3},{4,5,6},{7,8,9}};
        //Integer [][]test = new Integer[][] {{10,20},{30,40}};
        //Integer [][]test = new Integer[][] {{11},{22},{33}};
        //Integer [][]test = new Integer[][] {{1,2},{3,4}};
        
        List<List<Integer>> matrix = new ArrayList<>();
        
        for (Integer [] row: test)
        {
            matrix.add(Arrays.asList(row));
        }
        
        transposeMatrix(matrix);
    }
    
    public static List<List<Integer>> transposeMatrix(List<List<Integer>> matrix) 
    {
        List<Integer> temp = new ArrayList<Integer>();
        int size=0;
        int matrixSize=matrix.size();
        int posInList=0;
        int numElementsInList=0;
        int counter=0;
        int i;
        int position=0;
        boolean hasTransposed=false;
        
        for (List<Integer> ee: matrix)
        {
            for (int k: ee)
            {
                numElementsInList++;
            }
            break;
        }

        for (int j=0; j<numElementsInList;j++)
        {
            System.out.println("--------Commencing transposing at index: " + position);
            counter=0;
            System.out.println("1CURRENT TRANSFORMED MATRIX: " + finalMatrix);
            
            for (int k=0; k<matrixSize; k++)
            {
                hasTransposed=false;
                System.out.println("INNER LIST: " + matrix.get(k));
                
                for (int l: matrix.get(k))
                {
                    if (!hasTransposed)
                    {
                        System.out.println("position: " + position + "\tcounter: " + counter);

                        if (counter==position)
                        {
                            temp.add(l);
                            System.out.println("CURRENT LIST: " + temp);
                            hasTransposed=true;
                            counter=0;
                        }
                        else
                        {
                            counter++;
                        }
                    }                
                }
            }
            position++;
            
            System.out.println("CURRENT TRANSFORMED MATRIX: " + finalMatrix);
            finalMatrix.add(temp);
            System.out.println("NEWLY TRANSFORMATION: " + finalMatrix);
            System.out.println("Clearing current transposed entry from temp storage");
            temp.clear();
        }

        return finalMatrix;
    }
}