package main import ( "fmt" ) type node struct { val int next *node } type Queue struct { head *node tail *node } func NewQueue() *Queue { return &Queue{} } func (q *Queue) push(val int) { n := &node{val: val, next: nil} if q.head == nil { q.head = n q.tail = q.head } else { q.tail.next = n q.tail = n } } func (q *Queue) pop() (int, bool) { if q.head == nil { return 0, false } else { val := q.head.val q.head = q.head.next if q.head == nil { q.tail = nil } return val, true } } func (q *Queue) front() (int, bool) { if q.head == nil { return 0, false } else { return q.head.val, true } } func main() { var operation string var num int q := NewQueue() for { n, _ := fmt.Scan(&operation) if n == 0 { break } else { switch operation { case "push": _, _ = fmt.Scan(&num) q.push(num) case "pop": val, ok := q.pop() if ok { fmt.Println(val) } else { fmt.Println("error") } case "front": val, ok := q.front() if ok { fmt.Println(val) } else { fmt.Println("error") } } } } }