package main

import "fmt"

type result struct {
	i int
	a int
	b int
	q int
	x int
	y int
}

func euklid(a int, b int) int {
	fmt.Printf("a: %d b: %d\n", a, b)
	if b == 0 {
		return a
	}
	return euklid(b, a%b)
}

func euklidErw(a int, b int, i int, r []result) (int, int, int, int, []result) {
	r = append(r, result{
		i: i,
		a: a,
		b: b,
	})

	if b == 0 {
		r[i].x, r[i].y = 1, 0
		return a, 1, 0, i, r
	}
	r[i].q = a / b

	i++
	d_, x_, y_, i, r := euklidErw(b, a%b, i, r)
	i--

	d, x, y := d_, y_, x_-(a/b)*y_

	r[i].x, r[i].y = x, y
	return d, x, y, i, r
}

func printResult(res []result) {
	for _, r := range res {
		fmt.Printf("%d: a: %d b: %d q: %d x: %d y: %d\n", r.i, r.a, r.b, r.q, r.x, r.y)
	}
}
