#include <cstdint>
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::endl;

std::vector<std::vector<int>> bresenham(int x0,int y0,int x1,int y1)
{
    std::vector<std::vector<int>> v;
    std::vector<int> x_values;
    std::vector<int> y_values;
    int dx=x1-x0;
    int dy=y1-y0;
    int swap_flag=0;
    if (dy>dx){
        int c=x1;
        x1=y1;
        y1=c;

        int d=x0;
        x0=y0;
        y0=d;
    dx=x1-x0;
    dy=y1-y0;
    swap_flag=1;
    }
    int p=2*dy-dx;
    int x=x0;
    int y=y0;
    x_values.push_back(x);
    y_values.push_back(y);
    int i=0;
    do {
        if (p<0) {
            x+=1;
            p+=2*dy;
        }
        else{
            x+=1;
            y+=1;
            p+=2*(dy-dx);
        }
        /* cout<<x<<" "<<y<<std::endl; */
        x_values.push_back(x);
        y_values.push_back(y);
        i+=1;
    } while (i<dx);
    if(swap_flag==1){
    v.push_back(y_values);
    v.push_back(x_values);
    }
    else{
    v.push_back(x_values);
    v.push_back(y_values);
    }
    return v;
}



int main()
{
    std::vector<std::vector<int>> v=bresenham(0,0,5,3);
    cout<<"number of rows are"<<v.size()<<endl;
    cout<<"numbers of column are"<<v[1].size()<<endl;
    for(int i=0;i<v.size();i++)
    {
        for(int j=0;j<v[i].size();j++)
        {
            std::cout<<v[i][j]<<" ";
        }
        std::cout<<std::endl;
    }

}