graph = {} results = {} firstline = true matrix = {} --read the input file and create the necessary structure for line in io.lines() do if firstline then _, _, total = string.find(line, "(%d+)") total = tonumber(total) for i = 1, total do matrix[i] = {} for k = 1, total do matrix[i][k] = 0 end end firstline = false else local _, _, x, y = string.find(line, "(%d+)%s(%d+)") x = tonumber(x) y = tonumber(y) table.insert(graph, {x, y}) matrix[x][y] = 1 matrix[y][x] = 1 end end --fill the results table for i = 1, total do results[i] = 0 end --count items for _, v in ipairs(graph) do results[v[1]] = results[v[1]] + 1 results[v[2]] = results[v[2]] + 1 end --print results for i, v in ipairs(results) do print("Node " .. i .. " has a degree of " .. v) end --print adjacency matrix for i, v in ipairs(matrix) do local row = "" for _, k in ipairs(matrix[i]) do row = row .. k .. " " end print(row) end